我正在尝试使用setContent将XML文件设置为QDomDocument,并且它返回错误。
我的XML文件:
.contentcontainer {
Position: absolute;
height: auto;
width: 100%;
margin-left: auto;
margin-right: auto;
padding-top: 0%;
background-color:#111;
这是我的代码的片段:
<?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>
运行时收到的错误消息如下:
错误:解析元素7 11时发生错误
第7行,第11列。
现在,我非常确定这可能是由于“ \”或“。”。标记(Settings \ it.server.com)中的字符可能会导致其失败。无法更改XML,因为它来自外部来源。我的问题是使用QDomDocument解决吗?
我已经研究了QXmlStreamReader和Writer,但是我还没有弄清楚如何更新属性。 QDomDocument具有更好的功能。
答案 0 :(得分: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())