XPATH:选择具有特定属性的节点,子节点没有特定属性

时间:2017-04-11 13:38:37

标签: xml xslt xpath

我有XML,我想用minOccur =" 1"选择节点。但是所有的子节点都没有这样的属性。

我的XPATH:

//xnode[@type="parent" and @minOccurs="1" and ./child[not(@minOccurs)] and ./child[not(@or)] and ./not(ors) ]

XML:

<root>
<xnode type="parent" id="1" name="Date" maxOccurs="1" minOccurs="1">
    <Othertags id="2" language="FR" name="Date"/>
    <child id="3" name="dateone" maxOccurs="1" value="DONE">
        <def id="4" language="EN" value="this is date one"/>
    </child>
    <child id="5" name="datetwo" maxOccurs="1" minOccurs="1" value="DTWO">
        <def id="6" language="EN" value="this is date two"/>
    </child>
</xnode>
<xnode type="parent" id="7" name="Time" maxOccurs="1" minOccurs="1">
    <Othertags id="8" language="FR" name="time"/>
    <child id="9" name="timeone" maxOccurs="1" value="TONE">
        <def id="10" language="EN" value="this is time one"/>
    </child>
    <child id="11" name="timetwo" maxOccurs="1" value="TTWO">
        <def id="12" language="EN" value="this is time two"/>
    </child>
</xnode>
</root>

我只期望第二个节点:id =&#34; 7&#34;返回,但结果是两个节点都返回。 XPath出了什么问题?谢谢,

1 个答案:

答案 0 :(得分:3)

  

我有XML,我想用minOccurs="1"选择节点,但所有子节点都没有这样的属性。

我认为你的意思是:

//xnode[@type="parent" and @minOccurs="1" and not(child/@minOccurs)]

not(child/@minOccurs)的含义:“没有@minOccurs属性的孩子。”

child[not(@minOccurs)]的含义:“有一个孩子没有@minOccurs属性。”