アプリケーションはXMLから設定を読み込み、複数のファイルをエンティティとして読み込みますが、ドキュメントを保存するとすべてのファイルが1つにまとめられます。これは最悪のことではありませんが、変更が別のエンティティで終了した方が良いでしょう。それがオプションであれば、DTDの代わりにXSD構文を使用したいと思います。できるだけ避けたいのは、各ファイルを別々のドキュメントとしてロードして手動で結合する必要があります。libxmlを使用して外部エンティティでXMLファイルを1つにマージせずに保存する
サンプル設定:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE cfg SYSTEM "cfg.dtd" [
<!ENTITY sec SYSTEM "sec.xml">
]>
<cfg>
<!-- stuff -->
<!-- load external section -->
&sec;
<!-- more stuff -->
</cfg>
と些細な実体ファイルsec.xml
FWIW:
<?xml version="1.0" encoding="ISO-8859-1"?>
<sec>
<prop name="myprop">0</prop>
</sec>
私は問題ないと思うので、私は、DTDを含めていません。 Valaのを使用して
私はたぶん私は見ていないよライターを使用して中間のステップがあります
doc = Xml.Parser.read_file (file_name, null,
Xml.ParserOption.DTDATTR |
Xml.ParserOption.NOENT |
Xml.ParserOption.DTDVALID)
ドキュメントをロードし、
doc->save_file (file_name);
で保存します。
最初の手順は、 'NOENT'オプションを削除し、' &sec; 'の展開を無効にすることです。 – nwellnhof
私はそれが問題の一部であるかもしれないと思ったが、そこになければエンティティをまったく読み込まない。 – geoffjay
はい、 'NOENT'なしでエンティティノードを手動で処理する必要があります。しかし、 'NOENT'では、パース時にエンティティが置き換えられますが、これは可逆ではありません。おそらく、あなたのケースでは、文書を2回、「NOENT」なしで1回、そして1回は解析するのに役立つでしょうか? – nwellnhof