Как связать префиксы пространства имен при использовании QXmlQuery (Qt XQuery)? - PullRequest
2 голосов
/ 16 февраля 2011

Я пытаюсь использовать QXmlQuery для выполнения выражения XQuery для документа с объявленным пространством имен по умолчанию.

Для обсуждения:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://namespace.com/ns1">
    <node1 attr1="hi"/>
</root>

Теперь у меня есть следующее, чтобы открыть и запросить документ:

QFile temp("my.xml");
temp.open(QIODevice::ReadOnly | QIODevice::Text);

QXmlQuery query;
query.setFocus(&temp);

QXmlResultItems items;
query.setQuery("/root");

query.evaluateTo(&items);

При запуске этого элемента 'items' никогда не содержит данных, поскольку документ имеет пространство имен. Конечно, если я уберу декларацию пространства имен по умолчанию, «items» будет иметь правильные данные, но я не могу позволить себе такую ​​роскошь.

Я попытался изменить запрос на: "/ prefix: root", и Qt выдает предупреждение вроде:

No namespace binding exists for the prefix prefix in prefix:root

Так что привязка пространства имен существует! Но где? Я вижу QXmlNamePool, но у него нет методов-мутаторов. Я могу создать QXmlName с пулом из запроса аля:

QXmlName name(query.namePool(), "prefix", "http://namespace.com/ns1");

Но это ничего не меняет. Я в растерянности, у других наборов инструментов, которые я использовал, есть простые методы для привязки префиксов к URI пространства имен.

1 Ответ

3 голосов
/ 16 февраля 2011

Я думаю, что если вы измените свой запрос на

...
QXmlResultItems items;
query.setQuery("declare default element namespace \"http://namespace.com/ns1\"; /root");
...

должно вернуть данные.

надеюсь, это поможет, с уважением

...