c++ - 在 C++ 或 Qt 中格式化 XML 文件

标签 c++ xml qt xml-formatting

我有一个输出没有格式化的 XML 文件。这意味着所有输出都在一行中,但我想一个标签一个标签地打断它。

例如-

<?xml version="1.0" encoding="UTF-8" standalone="no" ?><Analyser>   <JointDetails>              <Details><StdThickness> T </StdThickness><Thickness_num> 0.032 </Thickness_num></Details>   </JointDetails></Analyser>

但我想这样做::

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Analyser>  
 <JointDetails>
   <Details>
<StdThickness> T </StdThickness>
<Thickness_num> 0.032 </Thickness_num>
</Details> 
  </JointDetails>
</Analyser>

请不要建议在编写 XML 文件时执行此操作,因为此 XML 文件已经存在,但现在我必须按照上述格式对其进行格式化。

最佳答案

使用 QXmlStreamReaderQXmlStreamWriter 应该可以满足您的需求。 QXmlStreamWriter::setAutoFormatting(true) 将在不同的行上格式化 XML 并使用正确的缩进。使用 QXmlStreamReader::isWhitespace(),您可以过滤掉标签之间多余的空格。

QString xmlIn = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>"
                "<Analyser><JointDetails>              <Details><StdThickness>"
                " T </StdThickness><Thickness_num> 0.032 </Thickness_num>"
                "</Details>   </JointDetails></Analyser>";
QString xmlOut;

QXmlStreamReader reader(xmlIn);
QXmlStreamWriter writer(&xmlOut);
writer.setAutoFormatting(true);

while (!reader.atEnd()) {
    reader.readNext();
    if (!reader.isWhitespace()) {
        writer.writeCurrentToken(reader);
    }
}

qDebug() << xmlOut;

关于c++ - 在 C++ 或 Qt 中格式化 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946734/

相关文章:

c++ - Qt 自定义控件大小

c++ - 无限图算法

c++ - 这是对临时 std::string 的正确使用吗?

c++ - 打开一个Shell程序,传递参数,返回结果

java - 定义命名空间标签以便生成的 XML 具有这些标签?

JAVA发送包含XML字符串的Post请求

c++ - 驻留在 QThread 中的 QObjects 自动删除了吗?

c++ - 显式 int 类型作为参数

c++ - 为什么 ADL 不适用于 Boost.Range?

xml - XPath - 复合谓词 + 测试值是否不以某物开头