libxml2(对于C)在保存时不保留其原始形式的空元素。它将<tag></tag>
替换为<tag/>
,这在技术上是正确的但会给我们带来问题。
xmlDocPtr doc = xmlParseFile("myfile.xml");
xmlNodePtr root = xmlSaveFile("mynewfile.xml", doc);
我尝试过使用各种选项(使用xlmReadFile
),但似乎都没有影响输出。这里有一篇帖子提到了禁用标签压缩,但是这个例子是针对PERL的,我发现C没有模拟。
是否有禁用此行为的选项?
答案 0 :(得分:3)
在xmlsave
module documentation中找到enum
:
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
。
答案 1 :(得分:0)
您的代码可能如下所示:
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