libxml2的(对于C)不保持在它们的原始形式的空元素上的节省。 它取代<tag></tag>
与<tag/>
这在技术上是正确的,但造成问题的我们。
xmlDocPtr doc = xmlParseFile("myfile.xml");
xmlNodePtr root = xmlSaveFile("mynewfile.xml", doc);
我已经试过(使用各种选项打xlmReadFile
),但似乎没有影响到输出。 这里的一个帖子中提到的禁用标签压缩,但该示例是为Perl和我发现没有模拟为C.
有没有禁止此行为的选项?
刚刚发现这个enum
中xmlsave
模块文档 :
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
。
您的代码可能会是这样:
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