与 Libxml2 中的 selectSingleNode 类似的函数

Similar function to selectSingleNode in Libxml2?

本文关键字:函数 selectSingleNode Libxml2 中的      更新时间:2023-10-16
<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
<catalog>
IXMLDOMNode* pnode;
IXMLDOMNode* pNodeAuthor = NULL;
pnode->selectSingleNode (CComBSTR(L"author"), & pNodeAuthor);

getElementsByTagName("book[@id='bk101']") 

selectNodes("//book[@id='bk101']") 

问:在上面的XML文件中,使用Microsoft的XML DOM,我可以通过使用selectSingleNode((或getElementbyTagName((或selectNodes((函数来获取任何特定的节点,只需传递节点名称即可。

我想使用 Libxml2 做同样的事情,我已经阅读了所有标准函数,但没有获得任何这样的函数,如果您知道任何类似的函数或其他方法,那么请帮助!

很多时候我不使用 libxml2,但是...

还有更多方法可以做到这一点。一种方法是使用 xpath

这是一个例子

简而言之,首先您应该打开并解析 xml 文件,获取带有xmlParseFile()xmlDocPtr

xmlDocPtr xmlDoc = xmlParseFile(fileName);

接下来,您应该创建一个 xml 路径上下文,其中包含xmlXPathNewContext()

xmlXPathContextPtr  xPathCnt = xmlXPathNewContext(xmlDoc);

现在,您可以找到具有 xpath 规则的节点;在您的情况下

xmlXPathObjectPtr result = xmlXPathEvalExpression((xmlChar*)"//book[@id='bk101']", xPathCnt);

如果结果不是空的,你可以检查一下

xmlXPathNodeSetIsEmpty(result->nodesetval)

您的元素应该在result->nodessetval并且它们的编号应该result->nodessetval->nodeNr

链接示例中的更多详细信息。

PS:注意,代码未测试

p.s.2:对不起,我的英语不好