1

TinyXPath はフットプリントが小さいため、単純な XPath クエリの魅力的なパッケージになっています。ただし、その機能の一部は、(初心者) が期待するようには機能しないようです。具体的には、特定の (非ルート) ノードの自明な子孫の一致を取得できないようです。この質問はほぼ同じ問題に関するものですが、XPath 式が最も近い子を超えた子孫を対象とする場合、提案された回答は機能しません。

入力例 (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 はエラーを報告しません。単に一致するものはありません。

この回答の定式化も試しました-実際に一致を返しますが、C/DではなくノードCのみを返します。

誰かが同様の問題を抱えていましたか?XPath 式の形式を間違えましたか?

TinyXPathのドキュメントがいくつかの指針を与えることを望んでいましたが...

ドキュメンテーション!は!スパルタン!

乾杯、

クラス

4

1 に答える 1

1

私の状況で他の人のために、私自身の質問に答えたいと思います。

この問題は、TinyXPath ディスカッション フォーラム のこのスレッドで議論されているように、TinyXPath に関する長年の問題でした。

この問題は、TinyXPath TinyXPath 非公式バージョン 1.3.2の時点で Andrey Antsut によって最終的に解決されました(これは、実際に私が見つけたこの「リリース」への唯一のリンクです)。

于 2013-12-09T13:18:03.117 に答える