QDomDocument:带有XML标签的setContent错误

时间:2019-02-22 20:01:17

标签: xml qt qxmlstreamreader qdomdocument

我正在尝试使用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具有更好的功能。

1 个答案:

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