我有一个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;