我有一个XSL文件,它在XSLT 2.0中匹配模板规则,只是为了检查哪个模板规则具有更高的优先级。但它只会设置为默认值,即使设置了优先级,也不会显示给其他人。您可以在此处看到它:http://xsltransform.net/nc4NzQ5/4我的XSL文件是架构感知的。
以下是我的XML
:
<test>test</test>
<test attr1="1">test2</test>
<test attr1="2">test3</test>
<test attr3="4">test4</test>
<test attr4="4">test5</test>
<test attr5="3">test6</test>
XSL文件是:
<xsl:template match="doc">
<out>
<xsl:apply-templates select="*"/>
</out>
</xsl:template>
<xsl:template match="test"><match>test</match></xsl:template>
<xsl:template match="element(test)[attr1='1']"><match>element(test)[attr1='1']</match></xsl:template>
<xsl:template match="element(test)[attr1='2']"><match>element(test)[attr1='2']</match></xsl:template>
<xsl:template match="element(test)[attr3='4']"><match>element(test)[attr3='4']</match></xsl:template>
输出为:
<match>test</match>
<match>test</match>
<match>test</match>
<match>test</match>
<match>test</match>
<match>test</match>
答案 0 :(得分:3)
以下更新的XSLT将按预期运行:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="doc">
<out>
<xsl:apply-templates select="*"/>
</out>
</xsl:template>
<xsl:template match="test"><match>test</match></xsl:template>
<xsl:template match="test[@attr1='1']"><match>test[@attr1='1']</match></xsl:template>
<xsl:template match="test[@attr1='2']"><match>test[@attr1='1']</match></xsl:template>
<xsl:template match="test[@attr3='4']"><match>test[@attr1='1']</match></xsl:template>
</xsl:stylesheet>
element(test)
可以简化为匹配模式中的test
。@
在属性名称之前。