我有这个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在这种情况下的工作原理吗?
答案 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?