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,而不是 C/D。

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

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

文档!是!斯巴达!

干杯,

克拉斯

4

1 回答 1

1

为了其他人的利益,我想回答我自己的问题。

这个问题一直是 TinyXPath 的一个长期问题,正如TinyXPath 讨论论坛上的这个线程中所讨论的那样

从 TinyXPath TinyXPath非官方版本 1.3.2开始,Andrey Antsut 终于解决了这个问题(这实际上是我发现的这个“版本”的唯一链接)。

于 2013-12-09T13:18:03.117 回答