11

私は、XML ファイルを読み取り、いくつかの変更を行い、XML を書き戻す Java プログラムを作成しています。

標準の Java XML DOM API を使用すると、属性の順序は保持されません。

つまり、次のような入力ファイルがあるとします。

<person first_name="john" last_name="lederrey"/>

出力ファイルは次のようになります。

<person last_name="lederrey" first_name="john"/>

XML 仕様では、順序属性は重要ではないと規定されているため、そのとおりです。

ただし、私のプログラムでは属性の順序を保持する必要があるため、入力ドキュメントと出力ドキュメントを比較ツールで簡単に比較できます。

そのための 1 つの解決策は、(DOM の代わりに) SAX を使用してドキュメントを処理することです 。DOM 処理後の XML 属性の順序

ただし、1 つのノードで行う必要がある変換は、ドキュメント全体のXPath式に依存する可能性があるため、これは私の場合には機能しません。

したがって、属性の順序を保持する点を除いて、標準の Java DOM ライブラリと非常によく似た XML ライブラリを用意するのが最も簡単な方法です。

そのような図書館はありますか?

PS: 属性の順序を保持する必要があるかどうかについての議論は避けてください。これは非常に興味深い議論ですが、この質問のポイントではありません。

4

7 に答える 7

2

属性の順序、コメント、さらにはインデントを保持できるため、DecentXMLを試してみることもできます。

人間が編集できるはずの XML ファイルをプログラムで更新する必要がある場合は、非常に便利です。設定ツールの 1 つに使用します。

- 編集 -

元の場所では利用できなくなったようです。これらを試してください:

于 2019-12-03T12:36:42.500 に答える
2

2 回実行します。

DOM パーサーを使用してドキュメントを読み取り、必要に応じて参照やリポジトリを取得します。

次に、SAX を使用して再度読み取ります。変換が必要な時点で、DOM バージョンを参照して必要なものを判断し、SAX ストリームの途中で必要なものを出力します。

于 2013-07-19T12:23:29.543 に答える
0

元のドキュメントの生成には、DOM の代わりにStAXを使用することをお勧めします。StAX を使用すると、これらのことを細かく制御でき、出力をすべてメモリに保持するのではなく、出力ストリームに段階的にストリーミングできます。

于 2013-07-19T12:34:23.840 に答える