3

libxml2(用于 C)在保存时不会以原始形式保留空元素。它取代<tag></tag><tag/>技术上正确但给我们带来问题的技术。

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

我尝试过使用各种选项(使用xlmReadFile),但似乎没有一个会影响输出。这里的一篇文章提到了禁用标签压缩,但这个例子是针对 PERL 的,我没有找到 C 的模拟。

是否有禁用此行为的选项?

4

2 回答 2

3

刚刚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.

于 2012-05-03T02:15:08.297 回答
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
于 2014-05-01T15:30:37.397 回答