2013-01-25 23 views
1

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文檔可以給一些指點,但...

文檔!是!斯巴達!

乾杯,

克拉斯

回答