我想检查是否有一个等于其中一个属性的字符串。例如:
<rules>
<mother cat="pp">
<daughter cat="pr"/>
<daughter cat="np"/>
</mother>
<mother cat="wp">
<daughter cat="rp"/>
<daughter cat="vp"/>
</mother>
<mother cat="cn">
<daughter cat="jj"/>
<daughter cat="cn"/>
</mother>
<mother cat="np">
<daughter cat="jj"/>
<daughter cat="np"/>
</mother>
</rules>
我只需要测试是否&#34; pp&#34;等于其中一位母亲&#39;猫属性。 对于这个例子,是的。但是对于&#34; pr&#34;。
应该是假的谢谢。
答案 0 :(得分:3)
使用以下表达式:
/*/mother[@cat='pp']
此表达式返回mother
元素,该元素具有名为cat
的属性,其值等于pp
。
在xsl:if
测试表达式中,如果存在这样的节点,则返回true
;是假的,否则。例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:if test="/*/mother[@cat='pp']">NODE EXISTS</xsl:if>
</xsl:template>
</xsl:stylesheet>
仅当源中存在此类节点时,此样式表才会打印NODE EXISTS
。
使用以下表达式查找此元素的位置:
count(/*/mother[@cat='pp']/preceding-sibling::*)+1
答案 1 :(得分:1)
此XPath语法适用于您的情况......
//mother[@cat='pp']
它将返回mother
属性中值为“pp”的所有cat
个节点。否则,如果您正在测试
//mother[@cat='pr']
然后你会得到一个空节点。
答案 2 :(得分:1)
此:
<xsl:if test="//mother[@cat = 'pp']">
<xsl:message terminate="no">
Exists!
</xsl:message>
</xsl:if>
将打印Exists!
如果至少有一位母亲@cat = 'pp'
。
答案 3 :(得分:0)
我只需要测试“pp”是否等于其中一只母猫 属性。
好问题,+ 1。
比所有其他现有答案更简单:
/*/mother/@cat = 'pp'
当true()
等于"pp"
元素的cat
属性的字符串值,即mother
的子元素时,这将完全评估为/*/mother/@cat = 'pr'
XML文档的顶部元素。
对于这个例子,是的。但对于“pr”来说应该是假的。
再次评估:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
/*/mother/@cat = 'pp' is <xsl:text/>
<xsl:value-of select="/*/mother/@cat = 'pp'"/>
/*/mother/@cat = 'pr' is <xsl:text/>
<xsl:value-of select="/*/mother/@cat = 'pr'"/>
</xsl:template>
</xsl:stylesheet>
以下是一个显示此操作的简单转换:
<rules>
<mother cat="pp">
<daughter cat="pr"/>
<daughter cat="np"/>
</mother>
<mother cat="wp">
<daughter cat="rp"/>
<daughter cat="vp"/>
</mother>
<mother cat="cn">
<daughter cat="jj"/>
<daughter cat="cn"/>
</mother>
<mother cat="np">
<daughter cat="jj"/>
<daughter cat="np"/>
</mother>
</rules>
应用于提供的XML文档:
/*/mother/@cat = 'pp' is true
/*/mother/@cat = 'pr' is false
产生了想要的正确结果:
{{1}}