xsltproc生成的输出比预期的多

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'>

我正在尝试编写一个简单的.xslt来处理.xml文件。但我一直很困惑——为什么标签
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>