我正在尝试编写一个简单的.xslt来处理.xml文件。但我一直很困惑 - 为什么标签<tag>text</tag>
中的文字也被打印出来?
请看一下例子:
sample.xml中
<source>
<employee>
<firstName>Joe</firstName>
<surname>Smith</surname>
</employee>
</source>
style.xsl
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="surname">
<div>
<xsl:value-of select="name()"/>
</div>
</xsl:template>
</xsl:stylesheet>
为什么在致电后:xsltproc style.xslt sample.xml
我正在
Joe
<div>surname</div>
而不是
<div>surname</div>
仅
答案 0 :(得分:4)
这是因为Joe
正在handled by default。通常默认输出文本节点。您需要覆盖默认行为。
<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>
答案 1 :(得分:2)
处理从文档节点开始,有built-in templates处理,直到模板匹配为止。您已经有一个建议来覆盖默认模板,在您的情况下,另一种方法可能是明确选择姓氏元素进行处理,例如。
<xsl:template match="/">
<xsl:apply-templates select="source/employee/surname"/>
</xsl:template>