3

libxml2 (C 用) は、保存時に空の要素を元の形式で保持していません。技術的には正しいものに置き換え<tag></tag>られ<tag/>ますが、問題が発生します。

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

( を使用して) さまざまなオプションを試してみましたxlmReadFileが、出力に影響を与えるものはないようです。ここの 1 つの投稿で、タグ圧縮を無効にすることが言及されていましたが、その例は PERL 用であり、C 用の類似物は見つかりませんでした。

この動作を無効にするオプションはありますか?

4

2 に答える 2

3

モジュールのドキュメント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

于 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 に答える