用libxml2缩进合并的XML文件
Indenting a merged xml file with 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>
"孩子"元素和" child_merged"元素应具有相同的凹痕。
如何缩进合并文件?预先感谢。
文档说:"请注意,format = 1
仅在调用xmlIndentTreeOutput = 1
或xmlKeepBlanksDefault(0)
时提供节点缩进。"
您的伪代码示例不包含其中任何一个,因此可能是问题。
还可以使用xmlstarlet format
或xmllint --format
之类的工具以后格式/重新指示XML文件。
更新:我做了更多的研究,Libxml2似乎不可能做的事情。引用常见问题:
libxml2不会发明文档内容中的空格 文档内容中的所有空格都是重要的。如果您建造 来自API的树并想要凹痕:
- 正确的方法也是自己生成这些。
- 危险的方法是要求libxml2将这些空白添加到您的 内容…
话虽如此,我确实通过使用xmlKeepBlanksDefault (0)
来正确地获得了缩进的输出。但是我没有合并两个文档,我只是加载了一个文档并将一些节点插入其中。因此,如果它对您不起作用,则可能是因为您合并的节点包含白色空间。因此,您可以在插入之前尝试修剪。
当您不发布您要做什么的完整示例时,很难提供建议。
相关文章:
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- c++ 读取 xml 文件的内容
- 删除 XML 文件中的子节点C++
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- 使用 libxml2 解析 XML 文件时缺少元素值
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 如何循环 n 次,在 xml 文件中每个循环一个级别
- 无法从 XML 文件中获取值
- 如何让用户在 tinyxml2 中输入 XML 文件的路径
- 使用 TinyXML2 读取 C++ 中的 XML 文件
- OPENCV - 如何在OpenCV中使用Haar Cascade Github xml文件?
- 我们如何重新制作程序以打开xml文件并在价格单词之后读取百分比值并更改此值
- 如何使用QXmlStreamReader解析包含对其他XML文件的引用的XML文件
- 如何解析列存储格式的XML文件
- OpenCV - 打开一个从C++到Python的XML文件
- 修改 XML 文件 QXMLStreamReader/Writer
- 如何使用libcurl c ++从url保存XML文件
- C++/RapidXML:编辑节点并写入新的 XML 文件没有更新的节点
- 如何使用所有其他文件信息来编译代码,例如HAAR级联训练的权重的XML文件
- 是否可以将信息从XML文件转换为CPP