libxml2的保留空标签(libxml2 preserve empty tags)

2019-06-25 08:51发布

libxml2的(对于C)不保持在它们的原始形式的空元素上的节省。 它取代<tag></tag><tag/>这在技术上是正确的,但造成问题的我们。

xmlDocPtr doc = xmlParseFile("myfile.xml");
xmlNodePtr root = xmlSaveFile("mynewfile.xml", doc);

我已经试过(使用各种选项打xlmReadFile ),但似乎没有影响到输出。 这里的一个帖子中提到的禁用标签压缩,但该示例是为Perl和我发现没有模拟为C.

有没有禁止此行为的选项?

Answer 1:

刚刚发现这个enumxmlsave模块文档 :

 Enum xmlSaveOption {
     XML_SAVE_FORMAT = 1 : format save output
     XML_SAVE_NO_DECL = 2 : drop the xml declaration
     XML_SAVE_NO_EMPTY = 4 : no empty tags
     XML_SAVE_NO_XHTML = 8 : disable XHTML1 specific rules
     XML_SAVE_XHTML = 16 : force XHTML1 specific rules
     XML_SAVE_AS_XML = 32 : force XML serialization on HTML doc
     XML_SAVE_AS_HTML = 64 : force HTML serialization on XML doc
     XML_SAVE_WSNONSIG = 128 : format with non-significant whitespace
 }

也许你可以重构你的应用程序来使用这个模块进行序列化,并用一下这些选项。 特别是与XML_SAVE_NO_EMPTY



Answer 2:

您的代码可能会是这样:

xmlSaveCtxt *ctxt = xmlSaveToFilename("mynewfile.xml", "UTF-8", XML_SAVE_FORMAT | XML_SAVE_NO_EMPTY);
if (!ctxt || xmlSaveDoc(ctxt, doc) < 0 || xmlSaveClose(ctxt) < 0)
  //...deal with the error


文章来源: libxml2 preserve empty tags
标签: libxml2