0

我正在尝试使用 setContent 将我的 XML 文件设置为 QDomDocument,但它返回错误。

我的 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 对此有更好的工具。

4

1 回答 1

0

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

于 2019-02-23T23:14:38.340 回答