1

我的 xsl 转换出现问题,我看不到问题(是的,新手)。

我有一个xml:

<REG_REQUEST>
    <header>
        <version/>
        <!-- many tags here -->

        <ref_dtls>
            <ref_doc_num>000111222</ref_doc_num>
            <ref_doc_date>01.01.2000</ref_doc_date>
            <ref_name>Hello world!</ref_name>
        </ref_dtls>
    </header>

    <general_info>
        <dfiState>AGRM</dfiState>
    </general_info>

    <add_info>some additional info here</add_info>
    <!-- many more tags here -->
</REG_REQUEST>

和一个xsl:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
    <xsl:output method="html" encoding="utf-8"/>

    <xsl:template match="header">
         <!-- template contents -->
    </xsl:template>
</xsl:stylesheet>

模板本身可以很好地打印,但之后它还会打印 xml 属性的所有值的列表。该模板仅包含一些 html 代码输出。我无法弄清楚为什么会这样。

4

1 回答 1

4

这是因为在未提供特定模板时使用的内置模板。这些如下:

  • 对于一个元素,处理它的节点子节点
  • 对于文本节点,给出它的值

您尚未为REG_REQUEST提供模板,因此内置模板将处理其子项。您有一个用于标头的模板,因此可以按预期工作,但没有用于REG_REQUEST其他子项的模板。这意味着默认行为启动,最终元素和属性的文本值得到输出。

解决方案是添加一个模板来匹配REG_REQUEST的其他子项并忽略它们,这样就不会对元素进行进一步处理

<xsl:template match="REG_REQUEST/*[not(self::header)]" />

这将导致除标题之外的所有其他元素被忽略。

于 2012-09-07T11:18:52.677 回答