Я пытаюсь использовать 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 пространства имен.