2010-05-13 62 views
4

我在想是否可以在libxml2中使用相对的XPath表达式。我可以在libxml2中使用相对的XPath表达式吗?

这是从javax.xml.xpath的API,我想使用的libxml2做类似事情:

Node widgetNode = (Node) xpath.evaluate(expression, document, XPathConstants.NODE); 

随着参考 元件,相对的XPath表达式 现在可以写入选择 子元素:您xmlXPathConte的

XPath xpath = XPathFactory.newInstance().newXPath(); 
String expression = "manufacturer"; 
Node manufacturerNode = (Node) xpath.evaluate(expression, **widgetNode**, XPathConstants.NODE); 

回答

5

设置节点成员xt对象。

6

下面是一些代码示例:

xmlXPathContextPtr xpathCtx = xmlXPathNewContext(doc); 

const xmlChar* xpathExpr = BAD_CAST "//column"; 
xmlXPathObjectPtr columnXPathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx); 


// Do whatever you want with your query here. Usually iterate over the result. 
// Inside this iteration I do: 

cur = columnNodes->nodeTab[i]; 

// Important part 
xpathCtx->node = cur; 

// After which you can do something like: 
xmlXPathObjectPtr screenXPathObj = xmlXPathEvalExpression(BAD_CAST "screen", xpathCtx); 
xmlNodeSetPtr screenNodes = screenXPathObj->nodesetval; 
for (int j = 0; j < screenNodes->nodeNr; j++) { 
// You're now iterating over the <screen>s inside the curent <column> 
} 

希望这可以帮助别人。

+1

它的工作原理非常好,需要注意的是,当xpathCtx-> node为NULL时,相对查询“tr/td”无效,当您为查询根目录设置xpathCtx-> node时变得有效 – fantastory 2012-02-13 12:48:29

相关问题