libxml2(用于 C)在保存时不会保留原始形式的空元素。它取代了<tag></tag>
与 <tag/>
这在技术上是正确的,但给我们带来了问题。
xmlDocPtr doc = xmlParseFile("myfile.xml");
xmlNodePtr root = xmlSaveFile("mynewfile.xml", doc);
我尝试过使用各种选项(使用 xlmReadFile
),但似乎都不会影响输出。这里的一篇文章提到禁用标签压缩,但该示例是针对 PERL 的,我没有发现 C 的类似情况。
是否有选项可以禁用此行为?
最佳答案
刚刚在 xmlsave
module documentation 中找到了这个枚举
:
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
。
关于libxml2 保留空标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423839/