TinyXPath的體積小巧,非常有吸引力的包裝進行簡單的XPath查詢。但是,它的一些功能似乎不能像一個(新手)預期的那樣工作。具體而言,我似乎無法獲得特定(非根)節點的微不足道的後代的匹配。 This question視爲幾乎相同的問題,但當XPath表達式針對超出最近兒童的後代時,建議的答案不起作用。TinyXPath:未能找到相對後裔
實施例輸入(的test.xml):
<A>
<B val="123">
<C>
<D val="321">123</D>
<E>e</E>
</C>
<F>f</F>
</B>
<C>
<D val="432">d1</D>
</C>
</A>
代碼:
#include "xpath_static.h"
int mainSO()
{
TiXmlDocument doc;
if(doc.LoadFile("test.xml")) {
TiXmlNode* pRoot = doc.RootElement();
assert(pRoot);
const TiXmlNode* pChild(nullptr);
TinyXPath::o_xpath_node(pRoot, "/A/B", pChild); // OK! Root-relative expressions work.
const TiXmlNode* pChild2(nullptr);
TinyXPath::o_xpath_node(pChild, "C", pChild2); // OK!
const TiXmlNode* pChild3(nullptr);
TinyXPath::o_xpath_node(pChild, "C/D", pChild3); // Fail!
// TinyXPath::o_xpath_node(pChild, ".C/D", pChild3); // Fail!
// TinyXPath::o_xpath_node(pChild, ".//C/D", pChild3); // Fail!
}
return 0;
}
o_xpath_node報告內的內部xpath_processor沒有錯誤;根本沒有比賽。
我也試過配方this答案 - 它確實返回匹配,但它僅返回節點C,不C/d。
任何人有類似的問題?我錯誤地格式化了XPath表達式嗎?
我曾希望TinyXPath文檔可以給一些指點,但...
文檔!是!斯巴達!
乾杯,
克拉斯