QDomDocument: ошибка setContent с тегом XML
Я пытаюсь установить мой файл XML на QDomDocument, используя setContent, и он возвращает ошибку.
Мой файл XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Tag1>
<Attribute1>5</Attribute1>
<Attribute2>5</Attribute2>
</Tag1>
<Settings\it.server.com>
<Attribute1>1</Attribute1>
</Settings\it.server.com>
</root>
Вот фрагмент моего кода:
QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) {
QDomDocument domDocument;
QString errorStr;
int errorLine;
int errorColumn;
if (!domDocument.setContent(&file, false, &errorStr, &errorLine, &errorColumn))
qDebug() << errorStr << errorLine << errorColumn;
}
Я получаю следующее сообщение об ошибке:
ошибка: произошла ошибка при разборе элемента 7 11
Где строка = 7 и столбец = 11.
Теперь я почти уверен, что это возможно из-за "\" или "." символ в теге (Settings\it.server.com), который может привести к сбою. XML нельзя изменить, потому что он из внешнего источника. Мой вопрос в любом случае вокруг этого с помощью QDomDocument?
Я посмотрел в QXmlStreamReader и Writer, но я не понял, как обновить атрибуты. QDomDocument имеет лучшие возможности для этого.
1 ответ
Синтаксический анализатор XML принимает буквы, цифры, точки, дефисы и т. Д. Перед синтаксическим анализом необходимо удалить недопустимые символы:
QFile f(filename);
if (!f.open(QFile::ReadOnly | QFile::Text)) return;
QTextStream in(&f);
QString content = in.readAll(); // Get the content
content.replace("\\", "_"); // Remove all '\' char
if (!domDocument.setContent(content, false, &errorStr, &errorLine, &errorColumn))
qDebug() << errorStr << errorLine << errorColumn;
Если ваш XML-файл огромен, вы также можете создать свой собственный QXmlInputSource
подкласс и заменить недопустимые символы во время чтения (см. QXmlInputSource:: next ())