1
<?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)) 这样的东西。结果应该类似于“/documents/music/album”

4

1 回答 1

0

应用以下 XPath 表达式后(基于XPath 教程):

xmlXPathEval("//*[@xlink='true']", doc)

您将获得指向节点列表的链接。在示例中,它是一个folder带有id 4. 然后你需要编写一个函数来遍历所有的父母并连接他们的name属性。

如果您只需要匹配文件夹的名称,那么您可以使用

xmlXPathEval("string(//*[@xlink='true']/@name)", doc)

并读取stringval结果的成员。但这仅匹配第一个节点。

编辑:至于迭代父母的功能,我想到了通过xmlNodePtr->parent成员直接访问并使用xmlGetProp. 但是当我看到您的评论(以及问题的标题)时,我认为您可以使用相对 xpath 查询,请参阅使用 libxml2 进行递归 XPath 查询的最有效方法是什么?.

于 2012-10-24T06:18:09.953 回答