xerces-c3.1を使用してXPathを評価する例はあまり見つかりませんでした。
次のサンプルXML入力があるとします。
<abc>
<def>AAA BBB CCC</def>
</abc>
XPath "/ abc / def / text()[0]"で "AAABBBCCC"文字列を取得する必要があります。
次のコードが機能します。
XMLPlatformUtils::Initialize();
// create the DOM parser
XercesDOMParser *parser = new XercesDOMParser;
parser->setValidationScheme(XercesDOMParser::Val_Never);
parser->parse("test.xml");
// get the DOM representation
DOMDocument *doc = parser->getDocument();
// get the root element
DOMElement* root = doc->getDocumentElement();
// evaluate the xpath
DOMXPathResult* result=doc->evaluate(
XMLString::transcode("/abc/def"), // "/abc/def/text()[0]"
root,
NULL,
DOMXPathResult::ORDERED_NODE_SNAPSHOT_TYPE, //DOMXPathResult::ANY_UNORDERED_NODE_TYPE, //DOMXPathResult::STRING_TYPE,
NULL);
// look into the xpart evaluate result
result->snapshotItem(0);
std::cout<<StrX(result->getNodeValue()->getFirstChild()->getNodeValue())<<std::endl;;
XMLPlatformUtils::Terminate();
return 0;
しかし、私は本当にそれが嫌いです:
result->getNodeValue()->getFirstChild()->getNodeValue()
私が望む正確なノードではなく、ノードセットにする必要がありますか?
「/abc/ def / text()[0]」や「DOMXPathResult ::STRING_TYPE」など、他の形式のXPathを試しました。xercesは常に例外をスローしました。
私は何を間違えましたか?