小さめの(せいぜい数MB、UTF-8でエンコードされた)XMLファイルを読み、さまざまな要素と属性を見て回って、おそらくいくつかを変更して、XMLをディスクに書き戻す必要があります(できれば、インデントされた書式で) 。
私のニーズに最適なXMLパーサーは何でしょうか?たくさんの選択肢があります。私が知っているいくつかは:
そしてもちろん、JDKの1つです(私はJava 6を使用しています)。私はXercesに精通していますが、それは不格好です。
推奨事項?
小さめの(せいぜい数MB、UTF-8でエンコードされた)XMLファイルを読み、さまざまな要素と属性を見て回って、おそらくいくつかを変更して、XMLをディスクに書き戻す必要があります(できれば、インデントされた書式で) 。
私のニーズに最適なXMLパーサーは何でしょうか?たくさんの選択肢があります。私が知っているいくつかは:
そしてもちろん、JDKの1つです(私はJava 6を使用しています)。私はXercesに精通していますが、それは不格好です。
推奨事項?
回答:
速度とメモリに問題がない場合は、dom4jが最適です。速度が必要な場合は、WoodstoxのようなStAXパーサーを使用するのが正しい方法ですが、物事を成し遂げるためにより多くのコードを記述し、ストリームでXMLを処理するために慣れる必要があります。
特定のパーサーの実装については考慮しないでください。XML処理用のJava APIを使用すると、標準に準拠したパーサー実装を使用できます。コードははるかに移植性が高く、特定のパーサーが古すぎることに気付いた場合は、コードの行を変更せずに別のパーサーに置き換えることができます(正しく実行した場合)。
基本的に、XMLを標準的な方法で処理するには3つの方法があります。
JDOMやApacheのような独自のAPI(つまり、Apache Xerces XMLSerializer)を忘れてください。これは、時間の経過に伴って進化したり、下位互換性が失われたりする可能性がある特定の実装に結び付けられるため、将来的にアップグレードするときにコードを変更するためです。 JDOMの新しいバージョンまたは使用しているパーサー。(ファクトリーとインターフェースを使用して)Java標準APIを使用する場合、コードははるかにモジュール化され、保守可能になります。
提案されたパーサーのすべて(すべてをチェックしたわけではありませんが、ほぼ確実です)はJAXP実装に準拠していると言う必要はないので、技術的には、どちらを使用してもすべてを使用できます。
これは、DOM、SAX、StAX、およびTrAXの優れた比較です(出典:http : //download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html)
機能StAX SAX DOM TrAX
APIタイプ プル、ストリーミングプッシュ、ストリーミングインメモリツリーXSLTルール
使いやすさ 高中高中
XPath機能 いいえいいえはいはい
CPUとメモリ 良い良いさまざまな
転送のみ はいはいいいえいいえ
XMLの読み取り はいはいはいはい
XMLの書き込み はいいいえはいはい
CRUD いいえいいえはいいいえ
単純なXML http://simple.sourceforge.net/は、オブジェクトの(逆)シリアル化が非常に簡単です。
SAXとDOMに加えて、XMLプルパーサーであるXMLStreamReaderを使用して利用可能なSTaX解析があります。
dom4jがXMLを操作するためのツールであることがわかりました。特にXercesと比較して。
私はこれをお勧めしません。あなたがあなたのアプリに多くの「思考」を持っているということですが、XSLTを使うことはJava操作よりも優れている(そしてXSLTからバイトコードへのコンパイルで潜在的に速くなる)かもしれません。