我有一个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;
如果您使用的是QT,则可以使用QXMLStreamReader读取它并使用QXMLStreamWriter编写,或将其解析为QDOMDOCUMEMEN,然后将其转换回QString。QXMLStreamWriter和QdomDocument支持格式。
如果您想要一个不依赖QT的简单强大解决方案,则可以使用libxml2。(如果您无论如何都使用QT,请使用Frank Osterfeld所说的话。)
xmlDoc* xdoc = xmlReadFile(BAD_CAST"myfile.xml", NULL, NULL, 0);
xmlSaveFormatFile(BAD_CAST"myfilef.xml", xdoc, 1);
xmlFreeDoc(xdoc);
我可以在我的C 包装器中感兴趣的Libxml2吗?
编辑:如果您碰巧在内存中有XML字符串,也可以使用XMLReadDoc ...但是它不止于此。
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);
}
利用C 您可以在>&lt的每个实例之间添加一个字符;用于输出:通过更改>&lt;到> n&lt;(这添加了新线的非打印字符)每个标签将在新线路上打印。但是,如上所述,有API可以执行此操作,但是对于一种简单的方法来执行您建议的控制台输出,或者使XML在文本编辑器之类的内容中流向每个标签的新线条, n应该可以正常工作。
如果您需要更优雅的输出,则可以使用n
(NEWLINE)和t
(TAB)自己编码方法来布置输出,或者如果您更精致的表示形式,则可以使用API。