使用xpath需要到达一个孩子并获得一个级别的另一个节点

时间:2014-11-03 01:42:13

标签: xpath

我正在尝试使用XPath遍历XML。我想访问/ group / isRequired [text()=' Optional']并向上移动一级以获取/ bool节点

我尝试过类似下面的一些内容,但似乎无法得到它...感谢任何输入。

我基本上想要在一个语句中验证Library节点,group + isRequired节点和bool节点。

//root/sample[library[text()='2']]/group/isRequired[text()='Optional']//bool[text()='true']
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']../bool[text()='true']
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']/bool[text()='true']
//root/sample[library[text()='2']]/group/isRequired[text()='Optional']/../bool[text()='true']


<root>
<sample>
    <id>1</id>
    <library>2</library>        
    <ruleName>Default</ruleName>        
    <group>
        <groupID>1</groupID>
        <groupName>orange</groupName>
        <isRequired>Optional</isRequired>           
    </group>
    <variant>1</variant>
    <bool>true</bool>
</sample>
</root>

3 个答案:

答案 0 :(得分:1)

您需要向上移动两步:

/root/sample[library[text()='2']]/group/isRequired[text()='Optional']/../../bool[text()='true']

但是将多个条件放在一个谓词中会更清晰:

/root/sample[library[text()='2'] and group/isRequired[text()='Optional'] and bool[text()='true']]

答案 1 :(得分:1)

简单:

/root/sample[library = "2" and group/isRequired = "Optional" and bool = "true"]

您不必使用/text()来获取XPath中每个节点的值。根据您的XML是否具有架构,您不需要将文字值放在引号中。没有它,一切都是字符串值,所以为了安全起见,我把它们放在引号中。

答案 2 :(得分:1)

您可以通过sample子节点过滤group/isRequired节点来使用不同的路由,然后您可以从该sample节点继续前往bool节点:< / p>

//root/sample[library='2' and group/isRequired='Optional']/bool[.='true']