4

libxml2で相対XPath式を使用できるかどうか疑問に思っています。

これはjavax.xml.xpathAPIからのものであり、libxml2を使用して同様のことを実行したいと思います。

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

要素への参照を使用して、相対XPath式を記述して、子要素を選択できるようになりました。

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

2 に答える 2

7

コード例を次に示します。

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>
}

これが誰かに役立つことを願っています。

于 2011-06-15T10:59:08.367 に答える
5

xmlXPathContextオブジェクトのノードメンバーを設定します。

于 2010-05-16T15:30:20.107 に答える