使用Xpath查找属性的祖先

使用Xpath查找属性的祖先,xpath,libxml2,Xpath,Libxml2,如果属性“link”为true,我需要路径。类似于xpath.evaluate(path if(link=true))。应用以下XPath表达式(基于)后,结果应该类似于“/documents/music/album”: 您将获得指向节点列表的链接。在本例中,它是一个具有id4的单个节点文件夹。然后,您需要编写一个函数,该函数将遍历所有父对象并连接它们的名称属性 如果只需要匹配文件夹的名称,则可以使用 xmlXPathEval("//*[@xlink='true']", doc) 并读取结果的

如果属性“link”为true,我需要路径。类似于xpath.evaluate(path if(link=true))。应用以下XPath表达式(基于)后,结果应该类似于“/documents/music/album”

您将获得指向节点列表的链接。在本例中,它是一个具有
id
4
的单个节点
文件夹
。然后,您需要编写一个函数,该函数将遍历所有父对象并连接它们的
名称
属性

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

xmlXPathEval("//*[@xlink='true']", doc)
并读取结果的
stringval
成员。但它只匹配第一个节点


编辑:对于遍历父对象的函数,我想到了通过
xmlNodePtr->parent
成员直接访问,并使用
xmlGetProp
读取属性。但正如我看到您的评论(以及问题的标题)一样,我认为您可以使用相对xpath查询,请参见。

xpath.evaluate(“/*[@link='true']/@name”,xlink);然后,我通过添加/。/直到选择的名称来递归获取父级。evaluate(“//*[@link='true']/../@name”,link);然后我附加了这个值好的建议,我需要更正答案的第二部分。我还添加了另一个通知。
xmlXPathEval("//*[@xlink='true']", doc)
xmlXPathEval("string(//*[@xlink='true']/@name)", doc)