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())
我正在尝试使用 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())