TinyXPath:未能找到相对后代

时间:2013-01-25 08:32:33

标签: xml xpath tinyxpath

TinyXPath的占地面积小,使其成为简单的XPath查询的有吸引力的包。然而,它的一些功能似乎不像一个人(新手)期望的那样工作。具体来说,我似乎无法获得特定(非根)节点的琐碎后代的匹配。 This question关于一个几乎相同的问题,但是当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报告没有错误;根本就没有比赛。

我还尝试了this回答中的表达式 - 它确实返回了匹配项,但它只返回节点C,而不是C / D.

有人有过类似的问题吗?我错误格式化了XPath表达式吗?

我曾希望TinyXPath文档可以给出一些指示,但是......

文档!是!斯巴达!

干杯,

克拉斯

1 个答案:

答案 0 :(得分:1)

在我的情况下为了别人的利益,我想回答我自己的问题。

这个问题一直是TinyXPath的一个长期问题,正如this thread on the TinyXPath discussion forum中所讨论的那样。

这个问题最终由安东尼·安苏特解决了TinyXPath TinyXPath inofficial version 1.3.2(这实际上是我发现的这个“发布”的唯一链接)。