11886


xmlParseFile();  
で読み込んだファイルは確実に読み込めているようなのですが、  
Xpathで抽出しようとするとうごきません。

xmlParseFile()の抽出結果の確認は  
xmlDocGetRootElement()でルートノードを取得しtag名を標準出力したところ、正常に表示できたという根拠です。

[code]

    <project xmlns="略">
      <modelVersion>4.0.0</modelVersion>
      <groupId>略</groupId>
      <artifactId>略</artifactId>
      <version>1.0.2</version>
      <name>略</name>
    
      ...
    </project>
    
[/code]

ようするにmavenのpom.xmlを読み込んで、Xpathで特定ノードを抽出したいんですが、

[code]

    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;
    }
    
[/code]

この関数を

[code]

    xmlNodeSetPtr versionObj = domParser.executeXpath(pomData, (xmlChar *)"//version[1]");
    
[/code]

こうしても、

[code]

    Error: unable to evaluate xpath expression
    
[/code]

の箇所で落ちてしまいます。

なぜなのでしょうか？


CC BY-SA 3.0
2015-06-30T08:50:51.367
11882
2015-06-30T09:30:15.937
8396
question
c++ xpath
C++でlibxml2(Xpath)が動かない


libxml2は指定通り動作しているのかもしれません。  
xmlns（デフォルト名前空間）の指定されたXMLに対して、名前空間未指定のXPathを実行したために一致しなかっただけでは。

<https://stackoverflow.com/questions/5239685/xml-namespace-breaking-my-xpath>


CC BY-SA 3.0
2015-06-30T09:30:15.937
11886
2015-06-30T09:30:15.937
2017-05-23T12:38:55.307
-1
4236
11882
answer