我的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代码输出。我无法弄清楚为什么会这样。
答案 0 :(得分:4)
这是因为在未提供特定模板时使用的内置模板。具体如下:
您尚未为 REG_REQUEST 提供模板,因此内置模板将处理其子项。您有标题的模板,因此可以按预期工作,但 REG_REQUEST 的其他子项没有模板。这意味着默认的行为开始,最终输出元素和属性的文本值。
解决方案是添加模板以匹配 REG_REQUEST 的其他子项,并忽略它们,以便不对元素进行进一步处理
<xsl:template match="REG_REQUEST/*[not(self::header)]" />
这将导致忽略标题以外的所有其他元素。