我尝试使用libxml2和c ++合并两个xml文件 这些xml文件具有相同的模式但具有不同的内容,我需要将一些元素合并到主xml文件中。 这些xml文件有不同的缩进。 (一个有空格但另一个有标签)
这是我的伪代码:
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>
孩子&#39;元素和&#39; child_merged&#39;元素应该有相同的缩进。
如何合并缩进合并文件? 提前谢谢。
答案 0 :(得分:1)
文档说:“请注意format = 1
仅在调用xmlIndentTreeOutput = 1
或xmlKeepBlanksDefault(0)
时才提供节点缩进。”
您的伪代码示例不包含任何这些,因此可能是问题。
此外,您可以使用xmlstarlet format
或xmllint --format
等工具来格式化/重新缩进xml文件。
<强>更新强> 我做了一些更多的研究,看起来你试图用libxml2做的事情是不可能的。引用FAQ:
自此以后,Libxml2将不会发明文档内容中的空格 文档内容中的所有空格都很重要。如果你建立 来自API的树并想要缩进:
- 正确的方法是自己生成这些。
- 危险的方法是让libxml2将这些空白添加到你的 内容......
醇>
话虽这么说,我确实设法使用xmlKeepBlanksDefault (0)
正确缩进输出。但我没有合并两个文件,我只加载一个并插入一些节点。因此,如果它不适合您,可能是因为您要合并的节点包含空格。所以你可以在插入之前尝试修剪。
当你没有发表你想要做的事情的完整例子时,很难给出建议。