C++でlibxml2(Xpath)が動かない
xmlParseFile();
で読み込んだファイルは確実に読み込めているようなのですが、
Xpathで抽出しようとするとうごきません。
xmlParseFile()の抽出結果の確認は
xmlDocGetRootElement()でルートノードを取得しtag名を標準出力したところ、正常に表示できたという根拠です。
<project xmlns="略">
<modelVersion>4.0.0</modelVersion>
<groupId>略</groupId>
<artifactId>略</artifactId>
<version>1.0.2</version>
<name>略</name>
...
</project>
ようするにmavenのpom.xmlを読み込んで、Xpathで特定ノードを抽出したいんですが、
xmlNodeSetPtr executeXpath(xmlDocPtr &doc, xmlChar *xpath_expr) {
xmlXPathContextPtr xpath_context;
xmlXPathObjectPtr xpath_obj;
xpath_context = xmlXPathNewContext(doc);
if (xpath_context == NULL) {
cerr << "Error: unable to create new XPath context" << endl;
xmlFreeDoc(doc);
return NULL;
}
xmlNodePtr node = xmlDocGetRootElement(doc);
/* Evaluate xpath expression */
xpath_obj = xmlXPathEvalExpression(xpath_expr, xpath_context);
if (xmlXPathNodeSetIsEmpty(xpath_obj->nodesetval)) {
cerr << "Error: unable to evaluate xpath expression" << endl;
xmlXPathFreeContext(xpath_context);
xmlFreeDoc(doc);
return NULL;
}
/* Print results */
return xpath_obj->nodesetval;
}
この関数を
xmlNodeSetPtr versionObj = domParser.executeXpath(pomData, (xmlChar *)"//version[1]");
こうしても、
Error: unable to evaluate xpath expression
の箇所で落ちてしまいます。
なぜなのでしょうか?