这个问题似乎有点混乱。所以让我通过一个例子描述我的情况:
假设我有一个XML: A.XML
<Cakes>
<Cake>Egg</Cake>
<Cake>Banana</Cake>
</Cakes>
另一个XML:B.xml
<Cakes>
<Cake show="true">Egg</Cake>
<Cake show="true">Strawberry</Cake>
<Cake show="false">Banana</Cake>
</Cakes>
现在我想显示一些文字说“ TRUE ”,如果A.xml
中的所有蛋糕都show="true"
中的B.xml
FALSE < /强>”。
在上述情况下,它将打印为FALSE。
我需要为此开发一个XSL。我可以循环遍历A.xml中的所有Cake并检查该蛋糕在B.xml中是否有show =“true”但是如果show =“false”我不知道如何打破(并设置变量)找到了。
有可能吗?任何帮助/意见表示赞赏。
答案 0 :(得分:1)
这里的问题是你不能在XSL中更新变量; XSL变量仅分配一次,但可以有条件地分配。
我认为更简单和更合理的选择是使用较小的XSL片段,并以编程语言编程,可以使用XPath进行描述。
答案 1 :(得分:1)
<xsl:choose>
<xsl:when test="count(document('B.xml')/Cakes/Cake[@show='true' AND text() = /Cakes/Cake/text()]) = count(/Cakes/Cake)">
true
</xsl:when>
<xsl:otherwise>
false
</xsl:otherwise>
应该帮助你(不是100%肯定)
答案 2 :(得分:1)
我认为最好的方法是:
“A.xml”中是否至少有一个元素“Cake”没有与“B.xml”中任何元素“Cake”相同的字符串值,其属性“show”为“true” ?
所以,在xpath 1.0中:
文件('A.xml')/ Cakes / Cake [not(。= document('B.xml')/ Cakes / Cake [@ show ='true'])] < / p>
注意:我为翻译道歉。我会讲西班牙语。
答案 3 :(得分:1)
正确评估此情况的最简单的XPath表达式之一是:
not(document('B.xml')/*/Cake[@show !='true'] = /*/Cake)