Qt中的XML表示法不一致

Inconsistent XML notation in Qt

本文关键字:不一致 表示 XML 中的 Qt      更新时间:2023-10-16

我正在使用Qt和C++来读/写XML文件。虽然我只使用Qt类,但有一种奇怪的行为。

QDomDocument document;
QDomElement element = document.createElement( "QString" );
QDomText textNode = document.createTextNode( "" ); // Empty string.
element.appendChild( textNode );

有时XML文件中的结果是<QString/>,有时是<QString></QString>。有人知道为什么会发生这种事吗?

由于您没有提供MCVE,我写道:

#include <QDebug>
#include <QDomDocument>
#include <QDomElement>
#include <QDomText>
int main()
{
    QDomDocument document;
    for (int i = 0;  i < 15;  ++i) {
        QDomElement element = document.createElement("QString");
        element.setAttribute("n", i);
        if (i%2)
            element.appendChild(document.createTextNode(QString()));
        document.appendChild(element);
    }
    qDebug() << qPrintable(document.toString());
}

这持续产生

<QString n="0"/>
<QString n="1"></QString>
<QString n="2"/>
<QString n="3"></QString>
<QString n="4"/>
<QString n="5"></QString>
<QString n="6"/>
<QString n="7"></QString>
<QString n="8"/>
<QString n="9"></QString>
<QString n="10"/>
<QString n="11"></QString>
<QString n="12"/>
<QString n="13"></QString>
<QString n="14"/>

只有当元素没有内容时,才会生成shorttag版本,而当有内容时,即使是带有空字符串的QDomText,也会生成full-open+close版本。