2012-03-31 15 views
1

私は10の属性を持つJavaオブジェクトを持っています。 属性の3-4はXMLファイルからのものです。Javaで大きなXMLファイルを解析する

XMLには、100〜150個の属性を持つ1つの要素があります。 私はXMLファイル全体を解析する必要があります(私はこのためにXSDを持っていません)、3-4属性を見つけてその値を取得します。

JAXBは私の場合、どのテクノロジを使用するべきか、特にJAXBはどのような機能を備えていますか? 何か助けていただければ幸いです。

+0

形容詞が問題に関連して「大」ですか?もしそうなら、私たちはどのくらい大きいかを知る必要があります。 2Mbが大きい人もあれば、20Gbを意味する人もいます。 XMLには「100-150属性の要素が1つあります。これはあいまいです。これは、XMLには1つの要素しか含まれておらず、その要素には100〜150の属性が含まれている可能性があります。または、XMLには多くの要素があり、そのうちの1つに100〜150の属性があることを意味する可能性があります。この区別は、答えに大きな違いをもたらす可能性があります。 –

+0

[JAXBが大きなXMLファイルをチャンクで解析できるかどうか](http://stackoverflow.com/questions/1134189)と[JAXB FAQ:大きな文書を扱う](http://jaxb.java.net/guide/Dealing_with_large_documents)を確認してください。 html)。 –

+0

@Michael:私のファイルは1 MBです。このファイルは、単一のデバイスの構成に関するものです。それは、数のプロトコルの説明が含まれています。また、各プロトコルには2-3個のフィールドがあります。私は2つまたは3つのプロトコルの価値に興味があります。 – user892871

答えて

2

はいこのユースケースでJAXB (JSR-222)作品:

私は10個の属性を持つJavaオブジェクトを持っています。属性の3-4はXMLファイルの になります。

オブジェクトの半分以下がJAXBを使用してXMLにマップされる場合は、@XmlAccessorType(XmlAccessType.NONE)を使用することをお勧めします。これにより、明示的に注釈を付けられたプロパティだけがXMLにマップされることがJAXBに伝えられます。

XMLは、その中に100〜150個の属性を持つ1つの要素があります。だから私は (私はこれのためのXSDを持っている)私のXMLファイル全体を解析し、 3-4属性を見つけて、それらの値を取得する必要があります。

JAXBの実装では、XMLドキュメントを処理するためにStAXパーサーまたはSAXパーサーが使用されます。これらは非常に効率的なパーサーであり、多くのメモリを必要としません。

+0

入力いただきありがとうございます。私は初心者であり、XML文書を処理するためにパーサーが必要な理由を理解できません。 Jax-Bの非整列化メソッドを実行すると、これは私のために行いますか? – user892871

+0

@ user892871 - 必要なのはJAXBだけです。つまり、JAXB(JSR-222)の実装では、XML文書の任意のサイズを効率的に処理するために、より低いレベルのパーサを使用するということです。 –

+0

Blaiseありがとうございました。 – user892871

関連する問題