使用libxml2缩进合并的xml文件 我试图用LIbxML2和C++来合并两个XML文件。 这些xml文件具有相同的模式,但内容不同,我需要将一些元素合并到主xml文件中。 这些xml文件有不同的缩进。(一个有空格,另一个有制表符)
这是我的伪代码:使用libxml2缩进合并的xml文件 我试图用LIbxML2和C++来合并两个XML文件。 这些xml文件具有相同的模式,但内容不同,我需要将一些元素合并到主xml文件中。 这些xml文件有不同的缩进。(一个有空格,另一个有制表符),c++,xml,merge,libxml2,C++,Xml,Merge,Libxml2,这是我的伪代码: xmlDocPtr doc1 = xmlParseFile(...); xmlDocPtr doc2 = xmlParseFile(...); xmlNodePtr node_from_doc1; for (node; ...) { ... xmlAddNextSibling(node_from_doc1, node); ... } xmlSaveFormatFile("merged.xml", doc1, 1); 合并后的xml文件没有很好地缩进 <r
xmlDocPtr doc1 = xmlParseFile(...);
xmlDocPtr doc2 = xmlParseFile(...);
xmlNodePtr node_from_doc1;
for (node; ...) {
...
xmlAddNextSibling(node_from_doc1, node);
...
}
xmlSaveFormatFile("merged.xml", doc1, 1);
合并后的xml文件没有很好地缩进
<root_elem attr1="attr">
...
<child>child_text</child>
<child_merged>child_merged</child_merged>
</root_elem>
...
儿童课文
儿童联合会
“child”元素和“child_merged”元素应该具有相同的缩进
如何才能很好地缩进合并的文件?
提前感谢。文档中说:“请注意,format=1
仅当调用了xmldindenttreeoutput=1
或xmlKeepBlanksDefault(0)
时才提供节点缩进。”
您的伪代码示例不包含任何这些,因此这可能是问题所在
您还可以使用xmlstarlet format
或xmllint--format
等工具对xml文件进行格式化/重新缩进
更新: 我做了一些进一步的研究,似乎您试图做的事情在libxml2中是不可能的。引用: Libxml2不会在文档内容中发明空格,因为 文档内容中的所有空格都是重要的。如果你建立 API中的树,需要缩进:
xmlkepblanksdefault(0)
获得了正确的缩进输出。但我并没有合并两个文档,我只是加载了一个,并在其中插入了一些节点。因此,如果它不适用于您,可能是因为您正在合并的节点包含空格。因此,您可以在插入之前尝试修剪
如果你不发布一个完整的例子来说明你想做什么,你就很难给出建议。@Jeremy我明白了。你在做分析之前打过电话,对吗?根据上面更新的答案。oops,我在解析后调用了
xmlKeepBlacnksDefault(0)
。现在我可以在解析之前调用这个api得到缩进的xml了!正如你所说,我发现有“text”元素包含空格。谢谢你的建议。