Попытка получить строку из документа XML с помощью QXmlQuery

Начиная с простого XML-файла:

<?xml version="1.0"?>
<playlist>
    <name>1 - first playlist</name>

    <song>Daft Punk\Discovery\Daft Punk-Discovery-01-One More Time.mp3</song>
</playlist>

Я нашел:

Я пытаюсь извлечь название плейлиста, поэтому я попытался:

QFile source(filePath);
source.open(QIODevice::ReadOnly | QIODevice::Text);
QXmlQuery query(QXmlQuery::XSLT20);
query.setFocus(&source);
query.setQuery("string(//name)", QUrl(filePath));

QString result = "";
query.evaluateTo(&result);

qDebug() << result;

source.close();

filePath - QString, передаваемый в этом методе.

Независимо от того, что я делаю, я получаю сообщение "Ошибка разбора: ожидается начальный тег" из загружаемого файла, но результата нет. Когда я проверяю, что находится в файле, это выглядит правильно.

1 ответ

Решение

С помощью QXmlQuery query(QXmlQuery::XSLT20); вы запрашиваете XSLT, а не XPath или XQuery, я подозреваю, что вы получите описанную ошибку, когда библиотека пытается проанализировать предоставленное выражение XPath или XQuery как XML-документ (поскольку XSLT - это XML, а XPath или XQuery - не XML). Так что просто используйте конструктор по умолчанию или явно установите язык как QXmlQuery::XQuery10,

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