<?xml>
<env>
<body>
<folderxml>
<folder id='1'>
<folder id='2' name ='document'>
<folder id='3' name ='Music'>
<folder id= '4' name= 'album' xlink='true'>
</folder>
</folder>
</folder>
</folder>
</folderxml>
</body>
</env>
如果属性“链接”,我需要路径。是真的。像xpath.evaluate(path if(link = true))之类的东西。结果应该是&#34; / documents / music / album&#34;
答案 0 :(得分:0)
应用以下XPath表达式(基于XPath tutorial)后:
xmlXPathEval("//*[@xlink='true']", doc)
您获得了节点列表的链接。在示例中,它是folder
id
的单个节点4
。然后你需要编写一个函数来遍历所有父项并连接它们的name
属性。
如果您只需要匹配文件夹的名称,则可以使用
xmlXPathEval("string(//*[@xlink='true']/@name)", doc)
并阅读结果的stringval
成员。但这只匹配第一个节点。
编辑:至于迭代父母的功能,我想通过xmlNodePtr->parent
成员直接访问并使用xmlGetProp
读取属性。但是当我看到你的评论(以及问题的标题)时,我认为你可以使用相对的xpath查询,请参阅What's the most efficient way to do recursive XPath queries using libxml2?。