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のドキュメントがいくつかの指針を与えることを望んでいましたが...
ドキュメンテーション!は!スパルタン!
乾杯、
クラス