Ken*_*nta 6 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>
Run Code Online (Sandbox Code Playgroud)
但我想这样做::
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Analyser>
<JointDetails>
<Details>
<StdThickness> T </StdThickness>
<Thickness_num> 0.032 </Thickness_num>
</Details>
</JointDetails>
</Analyser>
Run Code Online (Sandbox Code Playgroud)
请不要建议在写入XML文件时这样做,因为这个xml文件已经存在,但现在我必须按上面提到的格式化它.
提前致谢 .
使用a 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;
Run Code Online (Sandbox Code Playgroud)
void format(void)
{
QDomDocument input;
QFile inFile("D:/input.xml");
QFile outFile("D:/output.xml");
inFile.open(inFile.Text | inFile.ReadOnly);
outFile.open(outFile.Text | outFile.WriteOnly);
input.setContent(&inFile);
QDomDocument output(input);
QTextStream stream(&outFile);
output.save(stream, 2);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6369 次 |
最近记录: |