Я пытаюсь использовать QXmlQuery для получения некоторых элементов из файла XML. Все работает нормально (я могу проверить исходный XML-файл и т. Д.), Пока не доберусь до части, в которой я пытаюсь использовать QXmlFormatter, чтобы записать результаты в другой XML-файл. Когда я добираюсь до этой части, появляется следующая ошибка: Ошибка FODC0002 в теге: trolltech.com, 2007: QtXmlPatterns: QIODeviceVariable: inputDocument, в строке 1, столбце 0: преждевременное завершение документа.
Код основан на проекте «Рецепты», доступном в качестве примера в Qt. Единственное отличие состоит в том, что я сделал более простую версию XML-файла "поваренной книги". Я пытался использовать QBuffer (подход, реализованный в примере) вместо файла, но, как и ожидалось, получил тот же результат.
Вот исходный XML-файл, называемый temp2_xml.xml
<?xml version="1.0" encoding="UTF-8"?>
<cookbook>
<recipe>
<title>Quick and Easy Mushroom Soup</title>
<title>Cheese on Toast</title>
</recipe>
</cookbook>
Вот файл Xquery, который называется allRecipes.xq:
(: Select all recipes. :)
declare variable $inputDocument external;
doc($inputDocument)/cookbook/recipe/<p>{string(title)}</p>
А вот код:
QFile aqr_xq("C:/test_xml/allRecipes.xq");
aqr_xq.open(QIODevice::ReadOnly);
QFile file("C:/test_xml/temp_xml.xml");
file.open(QIODevice::ReadWrite);
QFile aqr_r;
aqr_r.setFileName("C:/test_xml/temp2_xml.xml");
aqr_r.open(QIODevice::ReadOnly);
QTextStream in(&aqr_r);
QString inputDocument = in.readAll();
const QString str_query(QString::fromLatin1(aqr_xq.readAll()));
QXmlQuery query;
query.bindVariable("inputDocument",&aqr_r);
query.setQuery(str_query);
bool debug_xml = false;
debug_xml = query.isValid();
QXmlFormatter ser(query, &file);
query.evaluateTo(&ser);
Есть идеи о том, что вызывает проблему и как ее решить?