XSL模板是如何应用的?

时间:2015-03-13 21:03:21

标签: xml xslt

我有这个xml:

<temas>
  <tema>
    <titulo>Odio como a un burgués la fuga de las sábanas.</titulo>
    <nav>
    <menu>
      <menu-item>One</menu-item>
      <menu-item>Two </menu-item>
      <menu-item>Three</menu-item>
      </menu>
    </nav>
    <content>
      <span>hi</span>
      <span>hi</span>
  </content>
  <pie>
    <prev>something</prev>
    </pie>
  </tema>
</temas>

我已应用此XSL转换:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
</xsl:template>

<xsl:template match="content">
  <xsl:copy-of select="./*" />
</xsl:template>

<xsl:template match="span" priority="10000">
    Why I don't show up?!
</xsl:template>

</xsl:stylesheet>

由于我对XSLT的了解有限,我原本预计最后一个模板将取代span节点,但这并不会发生。我希望身份转换会复制所有内容并应用匹配的所有模板,但它无法应用最后一个模板。我试图改变优先级无济于事。

在应用多个模板时,您能解释一下XSL在这种情况下的工作原理吗?

1 个答案:

答案 0 :(得分:3)

  

我原本预计最后一个模板会替换范围   节点,但这不会发生。

这不会发生,因为永远不会应用最后一个模板。它未应用,因为与父content节点匹配的模板不应用模板。如果不是:

,您会看到不同的结果
<xsl:template match="content">
  <xsl:copy-of select="./*" />
</xsl:template>

你会这样做:

<xsl:template match="content">
  <xsl:apply-templates/>
</xsl:template>

请在此处查看更详细的说明:
Why does processing a parent element's template prevent the processing of child element templates?