XML - 等于其中一个属性的字符串

时间:2011-12-05 20:52:11

标签: xml xslt xpath

我想检查是否有一个等于其中一个属性的字符串。例如:

<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;。

应该是假的

谢谢。

4 个答案:

答案 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}}