2016-09-29 13 views
0

私はJava 8でXMLファイルを解析するメソッドを作成します。 私はうまくいくでしょうが、私はparseBookObjectを使用できません。サックスの構文解析後にJavaオブジェクトを使用する

public static void parseISBN(fileObject) throws ParseException, ... 
 
{ 
 
\t // New Book Object with Datas from FileObject 
 
\t Book bookObject = new Book (fileObject.getPath, ...) 
 
\t \t 
 
\t // parse ISBN with marc21 
 
\t Marc21.parseISBN(bookObject); \t 
 
} 
 

 
// Class Mark21 
 
public static void parseISBN(Book bookObject) throws ... 
 
{ 
 
\t \t ... 
 
\t \t 
 
\t \t SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 
 
     saxFactory.setNamespaceAware(true); 
 
     SAXParser saxParser = saxFactory.newSAXParser(); 
 
     XMLReader xmlReader = saxParser.getXMLReader(); 
 

 
     xmlReader.setContentHandler(new Marc21Handler()); 
 
     xmlReader.parse(sruAbfrage); 
 
} 
 

 

 
public class Marc21Handler extends DefaultHandler 
 
{ 
 
\t ... 
 
\t Book parserBookObject = new Book(); 
 
\t 
 
\t public void startDocument ... 
 
\t public void startElement ... 
 
\t public void characters... 
 
\t ... 
 
\t if ("245".equals(this.bufferNummer)) { 
 
      if ("a".equals(this.bufferCode)) { 
 
       parserBookObjekt.setTitel(zeichenkette); 
 
\t \t \t \t .. 
 
\t \t \t \t } 
 
\t \t \t \t ... 
 
\t public void endElement... 
 
}

私の問題私はハンドラ内 "parseBookObject" にXML件のデータを収集すること、です。私はこのメソッドのメソッド "parseISBN(fileObject)"にオブジェクトを返すことができるか分かりません。収集した情報のデータを使用します。

私はオブジェクト "bookObject"をこれらのオブジェクトへのコレクションXML DatasのHandlerに渡して返します。 xmlReaderまたはParserからHandlerに他のオブジェクトを渡すことはできませんか? その後、 "parserBookObject"という名前のHandlerで新しいオブジェクトを作成し、Datasを収集した後、メソッド "parseISBN(fileObject)"に戻したいと思います。

どのようにすればいいのですか?ローカル変数で

おかげ

答えて

0

ストアMarc21Handlerインスタンスとあなたが解析し終わった後のフィールドを返します。

そのような何か:

public static void parseISBN(Book bookObject) throws ... 
{ 
    ... 

    SAXParserFactory saxFactory = SAXParserFactory.newInstance(); 
    saxFactory.setNamespaceAware(true); 
    SAXParser saxParser = saxFactory.newSAXParser(); 
    XMLReader xmlReader = saxParser.getXMLReader(); 
    March21Handler handler = new Marc21Handler() 
    xmlReader.setContentHandler(handler); 
    xmlReader.parse(sruAbfrage); 
    return handler.parserBookObject; 
} 

しかし、あなたはJAXB/XStreamの/ジャクソンのように、自分に好意を行うと、別の何かを使用したい場合があります。あなたがストリーミングパーサーを使用することを主張するならば、たぶんStaxでも。

+0

ありがとうございました。それは今仕事になるでしょう。 – mj44

0

Marc21Handlerオブジェクトをクラスのフィールドとして作成し、解析されたオブジェクトを返すgetBookObject()のようなメソッドをそのクラスに追加します。その方法を電話するparseISBN()

+0

ご協力ありがとうございます。それは今仕事になるでしょう。 – mj44

関連する問題