<?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);
OR
getElementsByTagName("book[@id='bk101']")
OR
selectNodes("//book[@id='bk101']")
问:在上面的XML文件中,使用Microsoft的XML DOM,我可以通过使用selectSingleNode()或getElementbyTagName()或selectNodes()函数获取任何特定节点,只需传递节点名称即可
我想使用Libxml2做同样的事情,我已经阅读了所有标准函数,但没有得到任何类似的函数,如果你知道任何类似的功能或其他方法那么请帮助!
答案 0 :(得分:3)
很多时候我不使用libxml2但是......
有更多方法可以做到这一点。一种方法是使用xpath
Here这是一个例子
简而言之,首先,您应该打开并解析xml文件,获取xmlDocPtr
xmlParseFile()
xmlDocPtr xmlDoc = xmlParseFile(fileName);
接下来,您应该使用xmlXPathNewContext()
xmlXPathContextPtr xPathCnt = xmlXPathNewContext(xmlDoc);
现在您可以找到具有xpath规则的节点;在你的情况下
xmlXPathObjectPtr result = xmlXPathEvalExpression((xmlChar*)"//book[@id=\'bk101\']", xPathCnt);
如果结果不合理,您可以使用
进行检查xmlXPathNodeSetIsEmpty(result->nodesetval)
您的元素应位于result->nodessetval
,其编号应为result->nodessetval->nodeNr
链接示例中的更多详细信息。
p.s。:谨慎,未经过测试的代码
p.s.2:抱歉我的英语不好