我有一个输出没有格式化的 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 文件已经存在,但现在我必须按照上述格式对其进行格式化。
最佳答案
使用 QXmlStreamReader
和 QXmlStreamWriter
应该可以满足您的需求。 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/