xsltproc生成的输出比预期的多
我正在尝试编写一个简单的.xslt来处理.xml文件。但我一直很困惑——为什么标签xsltproc生成的输出比预期的多,xslt,Xslt,我正在尝试编写一个简单的.xslt来处理.xml文件。但我一直很困惑——为什么标签text中的文本也被打印出来了? 请看下面的例子: sample.xml 而不是 <div>surname</div> 姓氏 只有?这是因为Joe正在进行测试。默认情况下,文本节点通常是输出的。您需要覆盖默认行为 <xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
text
中的文本也被打印出来了?
请看下面的例子:
sample.xml
而不是
<div>surname</div>
姓氏
只有?这是因为
Joe
正在进行测试。默认情况下,文本节点通常是输出的。您需要覆盖默认行为
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<!--Added to match all other nodes/attributes.-->
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
<xsl:template match="surname">
<div>
<xsl:value-of select="name()"/>
</div>
</xsl:template>
</xsl:stylesheet>
处理从文档节点开始,在模板匹配之前,有一些节点会一直处理。您已经得到了一个覆盖默认模板的建议,在您的案例中,另一种方法可能是显式地只选择姓氏元素来处理,例如
<xsl:template match="/">
<xsl:apply-templates select="source/employee/surname"/>
</xsl:template>
假设“Joe”在firstName元素中,而不是姓氏元素中,那么这实际上就是您得到的输出吗?你能澄清一下你所列出的输入到底看到了什么吗?我得到的正是下一个输出:Joe姓氏
<div>surname</div>
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<!--Added to match all other nodes/attributes.-->
<xsl:template match="node()|@*">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
<xsl:template match="surname">
<div>
<xsl:value-of select="name()"/>
</div>
</xsl:template>
</xsl:stylesheet>
<xsl:template match="/">
<xsl:apply-templates select="source/employee/surname"/>
</xsl:template>