2011-12-14 7 views
1

xmlファイルからデータを読みたいので、XMLReaderContentHandlerが存在し、endDocument()が発生した時点ですべてのデータを収集しています私はその文書から必要です。XML文書の解析中にオブジェクトが返される

しかし、それは私のアプリケーションで使用できるようになりました、それは私が壁にぶつかったようだ...

にはどうすれば(ContentHandlerから)収集したデータを返すのですか?技術的には

+1

それはハンドラです( 'ContentHanlder')示唆しています。そして、ハンドラから戻ってくるのではなく、発生したイベントを処理します。ここでは、http://docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/ContentHandler.htmlを参照してください。すべてのメソッドの戻り値の型は無効です。あなたが行うことができることは、ハンドラ内でどこからやる必要があるかをどこかに保存する(またはプッシュする)ことです。 –

+0

私が今までに気づいたことは、私のデータを使用するためのエレガントな方法を探していて、次にアプリケーションに次に何をすべきかを伝えることだけです。 – mstoppert

+0

それでは、データの収集が完了した後、アプリケーションで実際に何をしようとしているのかを反映するために、あなたの投稿を更新する必要があります。今すぐあなたが本当に次にしようとしていることを推測することは不可能ですから。 –

答えて

1

ContentHandlerにList<T>を作成することができます。

public class MyTextHandler implements ContentHandler { 
    .... 
    private ArrayList<YourModel> list; 

    public MyTextHandler() { 
    list= new ArrayList<YourModel>(); 
    } 
    public ArrayList<YourModel> getList() { 
    return list; 
    } 
    .... 
} 

ハンドラからリストを取得します。名前のよう

MyTextHandler handler=new MyTextHandler(); 
reader.setContentHandler(handler); 
InputSource is = new InputSource(filename); 
reader.parse(is); 

ArrayList<YourModel> list=handler.getList(); 
0

...

あなたがたContentHandlerから本当に「リターン」のデータをいけない - コンテンツハンドラは、特定の入力/出力契約を履行するために設計されていません。むしろ、それは、XMLデータ読み取りアクションに「作用する」と考えられるオブジェクトです。 ContentHandlerの中には、ホストアプリケーションとやり取りできないものがあります。例えば、コンソールにデータを出力するだけの場合もあります。一方、XMLオブジェクトをBeanとして処理してから、それらのBeanをデータベースにシリアライズする人もいます。

アプリケーションをContentHandlerに直接依存させてオブジェクトを作成する場合、ContentHandlerは通常、アプリケーションのモデルにアクセスしてそのモデルにデータを書き込むアプリケーションのサブクラスである場合があります。ここで "Model"とは、一般的なMVCアプリケーションのMを指しています。私たちは、データベースへのアウトすべてのXMLデータをダンプ前記

のContentHandlerインターフェースは、あなたのSAXパーサの振る舞いを定義することを意味する実践的な回答

...データは、多くの場合、EndDocumentの()メソッドで作成され、または印刷文として使用できます。

+0

それはちょうど正しい方向へのキックかもしれません...私はMVCを "知って"私は本当にそれを使用する方法を理解するようになったとは思えないので、今すぐいくつかのまともな睡眠を持って、エレガントに、しかし私はgoogleが知っていると思う。応答ありがとう! – mstoppert

+0

Good-また、次の質問を参照してください。もう少し具体的には、「M」は返されるListであり、ハンドラはモデルをカプセル化しています。 – jayunit100

関連する問題