2012-01-30 64 views
1

我需要将一小段代码从PHP移植到C,该代码片段提取各种元素的值,这些元素可以按照其树中的级别的任意顺序排列。一个例子的XML文档是:使用xmllib2 for C获取元素值

<book> 
    <author>John Smith</author> 
    <title>A Marvelous Book</title> 
</book> 

在PHP的代码,以提取标题是:

$xmlDoc = new SimpleXMLElement($xmlStr); 
$title = $xmlDoc->title; 

对于我将使用的libxml2(其中我没有熟悉)C。到目前为止,我有:

xmlDoc = xmlReadMemory(xmlStr, strlen(xmlStr), "noname.xml", NULL, 0); 

现在是什么?我应该使用XPATH来提取标题吗?似乎过度杀伤... 请指教。

回答

1

所以我落得这样做,例如提取标题,就是:

if (xpathCtx = xmlXPathNewContext(doc)) { 
    if (xpathObj = xmlXPathEvalExpression("//title[1]", xpathCtx)) { 
     if (nodes = xpathObj->nodesetval) { 
      if ((nodes->nodeNr == 1) && (nodes->nodeTab[0]->type == XML_ELEMENT_NODE)) { 
       value = xmlNodeGetContent(xpathObj->nodesetval->nodeTab[0]); 
      } 
     } 
    } 
} 

呸!