所以,我有像这样的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
)
答案 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]