我有一个看起来像跟随的xml文件。
<root>
<children>
<foo1 val="23"/>
<foo2 val="14"/>
</children>
</root>
我希望使用函数 xmlNewChild(),然后是 xmlNewProp(),将一个名为 foo 的新子节点添加到节点。我希望生成如下内容。
<root>
<children>
<foo1 val="23"/>
<foo2 val="14"/>
<foo3 val="5"/>
</children>
</root>
但是,我总是最终得到以下结论。
<root>
<children>
<foo1 val="23"/>
<foo2 val="14"/>
<foo3 val="5"/></children>
</root>
我明白libxml2默认不支持空格。但是,有没有办法实现我想要的结果?我需要在新添加的孩子的前面和新行中添加这些标签。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:4)
问题是XML结构实际上是这样的:
<root>
[TEXT:"\n "]
<children>
[TEXT:"\n "]
<foo1 val="23"/>
[TEXT:"\n "]
<foo2 val="14"/>
[TEXT:"\n "]
</children>
[TEXT:"\n"]
</root>
如果你只是在children
的末尾添加一个额外的元素节点,你可以看到你获得的是不可避免的(因为没有文本节点来携带换行符和{{1}之间所需的缩进}和foo3
)。
您需要编辑children
内的最终文本节点(紧跟children
之后的那个)以给它一个额外的缩进,然后追加新节点,然后附加一个新的文本节点以缩进{ {1}}。或者,您可以在foo2
内插入与先前文本节点相同的文本节点,然后在</children>
中的最终文本节点之前插入新元素节点。两者都应该给你相同的结果,你需要的结果:
children
另一种方法是让libxml2自动为您输出输出。这将破坏现有的缩进并从头开始重做。 Here是一个相关的答案。
答案 1 :(得分:0)
使用xmlTextWriterSetIndent
Ref:http://xmlsoft.org/html/libxml-xmlwriter.html#xmlTextWriterSetIndent