TinyXPath: не найден относительный потомок

Небольшой размер 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;
}

Внутренний xpath_processor внутри o_xpath_node не сообщает об ошибках; просто нет совпадений.

Я попробовал также формулировку в этом ответе - он действительно возвращает совпадение, однако он возвращает только узел C, а не C/D.

У кого-нибудь была похожая проблема? Я неправильно форматировал выражения XPath?

Я надеялся, что документация TinyXPath может дать некоторые указания, но...

Документация! Является! Спартанец!

Ура,

Клас

1 ответ

Решение

В интересах других в моей ситуации я хотел бы ответить на свой вопрос.

Эта проблема была давней проблемой TinyXPath, как обсуждалось в этой теме на дискуссионном форуме TinyXPath.

Эта проблема была окончательно решена Андреем Анцутом в неофициальной версии 1.3.2 TinyXPath TinyXPath (это единственная ссылка на этот "релиз", который я нашел).

Другие вопросы по тегам