我看到过奇怪的行为,奇怪的是它与我们正常情况下的条件相反。 以下是详细信息:
XSLT代码
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:template match="child[@include='1']"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
源XML
<?xml version="1.0" encoding="UTF-8"?>
<Parent>
<child include='1'>
<Attribute>Attribute1</Attribute>
</child>
<child include='1'>
<Attribute>Attribute2</Attribute>
</child>
<child include='0'>
<Attribute>Attribute3</Attribute>
</child>
<child include='0'>
<Attribute>Attribute4</Attribute>
</child>
</Parent>
我的结果是:
<Parent>
<child include="0">
<Attribute>Attribute3</Attribute>
</child>
<child include="0">
<Attribute>Attribute4</Attribute>
</child>
</Parent>
根据正常情况我们应用的结果应符合以下条件
<xsl:template match="child[@include='1']"/>
<Parent>
<child include="1">
<Attribute>Attribute3</Attribute>
</child>
<child include="1">
<Attribute>Attribute4</Attribute>
</child>
</Parent>
希望我已详细解释: 这是代码和xslt处理器的链接:Sample Code
答案 0 :(得分:1)
我不确定你的期望是什么。
您的第一个模板的优先级为0.5,而您的第二个(身份转换)模板的优先级为-0.5。
因此,应用于child
属性为include
的所有1
元素的模板是第一个模板。 此模板为空,因此不输出任何内容。因此,输出中不会显示child
属性为include
的{{1}}元素。
所有其他节点都与第二个模板匹配,后者将它们(以及递归,它们的后代)复制到输出。