如何使用xpath查找具有在另一个节点中指定的id的xml节点

时间:2014-06-16 14:24:24

标签: xml xpath

所以,我有像这样的xml文档:

<main>
    <objects>
        <object>
            <objectid>1</objectid>
            <parentid>0</parentid>
            <type>1</type>
        </object>
        <object>
            <objectid>2</objectid>
            <parentid>1</parentid>
            <type>2</type>
        </object>
        <object>
            <objectid>3</objectid>
            <parentid>1</parentid>
            <type>1</type>
        </object>
        <object>
            <objectid>4</objectid>
            <parentid>2</parentid>
            <type>2</type>
        </object>
    </objects>
</main>

我可以使用xpath找到所有节点type = 2和节点objectid = parentid的节点吗?

使用 xmllint ,我可以找到所有给定类型的节点:

 xpath //main/objects/object[type[text()=2]]

但接下来呢? (搜索应该返回第一,第三和第四个节点object

2 个答案:

答案 0 :(得分:2)

问题不明确,您是否希望找到类型为2的节点,并且该节点的对象等于该节点的parentid?

/main/objects/object[type[text()='2'] and objectid = parentid]

但是你会在示例中没有返回任何对象吗?

答案 1 :(得分:0)

目前还不完全清楚你想要获得什么,所以我要根据孩子的选择选择对象。

你打电话的对象&#34;父母&#34;在您的文档中(通过兄弟对象通过parentid引用的文档)可以使用以下方法选择:

//main/objects/object[objectid=../object/parentid]

将选择示例中的前两个object节点。

您可以添加其他谓词,以进一步限制选择。如果您只想在具有type='2'的元素的上下文中使用上述限制,那么您可以使用:

//main/objects/object[type='2'][objectid=../object/parentid]

将仅选择第二个节点。

反转(选择parentid等于任何兄弟objectid的节点将选择最后三个节点:

/main/objects/object[parentid=../object/objectid]

将上下文限制为type='2'个节点,然后使用此表达式获取第二个和最后一个object元素:

/main/objects/object[type='2'][parentid=../object/objectid]