QDomDocument:带有 XML 标记的 setContent 错误

QDomDocument: setContent error with XML tag

我正在尝试使用 setContent 将我的 XML 文件设置为 QDomDocument,但它 returns 出错了。

我的 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;
}

我在 运行 时收到的错误消息如下:

error: error occurred while parsing element 7 11

其中行 = 7,列 = 11。

现在我很确定这可能是因为“\”或“.”。标记 (Settings\it.server.com) 中可能导致失败的字符。 XML 无法更改,因为它来自外部源。我的问题是关于这个使用 QDomDocument 的问题吗?

我研究了 QXmlStreamReader 和 Writer,但我还没有弄清楚如何更新属性。 QDomDocument 对此有更好的设施。

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()