使用libxml2缩进合并的xml文件

时间:2016-12-14 05:16:43

标签: c++ xml merge libxml2

我尝试使用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;元素应该有相同的缩进。

如何合并缩进合并文件? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

文档说:“请注意format = 1仅在调用xmlIndentTreeOutput = 1xmlKeepBlanksDefault(0)时才提供节点缩进。”

您的伪代码示例不包含任何这些,因此可能是问题。

此外,您可以使用xmlstarlet formatxmllint --format等工具来格式化/重新缩进xml文件。

<强>更新 我做了一些更多的研究,看起来你试图用libxml2做的事情是不可能的。引用FAQ

  

自此以后,Libxml2将不会发明文档内容中的空格   文档内容中的所有空格都很重要。如果你建立   来自API的树并想要缩进:

     
      
  1. 正确的方法是自己生成这些。
  2.   
  3. 危险的方法是让libxml2将这些空白添加到你的   内容......
  4.   

话虽这么说,我确实设法使用xmlKeepBlanksDefault (0)正确缩进输出。但我没有合并两个文件,我只加载一个并插入一些节点。因此,如果它不适合您,可能是因为您要合并的节点包含空格。所以你可以在插入之前尝试修剪。

当你没有发表你想要做的事情的完整例子时,很难给出建议。