我找不到很多使用xerces-c 3.1評估XPath的例子。xerces-c 3.1 XPath評估
鑑於下面的示例XML輸入:
<abc>
<def>AAA BBB CCC</def>
</abc>
我需要的XPath來檢索 「AAA BBB CCC」 字符串 「/ ABC/DEF /文本()[0]」。
下面的代碼工作:
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()
有它被一個節點設置我想確切的節點呢?
我嘗試了其他格式的XPath,例如「/ abc/def/text()[0]」和「DOMXPathResult :: STRING_TYPE」。 xerces總是拋出異常。
我做錯了什麼?
result-> getStringValue()總是拋出,無論TYPE傳遞給evaluate()。 result-> getNodeValue() - > getTextContent()的作品。謝謝 –
使XPath能夠使result-> getStringValue()起作用是非常好的。任何人都知道如何? –
@JohnCrane有沒有辦法知道文檔是否屬於解析器? 你可以請看看這個問題.. http://stackoverflow.com/questions/23673300/how-to-know-if-a-domdocument-is-created-using-a-parser – Pavan