2016-09-29 15 views
0

我創建了一個將在Java 8上解析XML文件的方法。 我會工作但我不能使用parseBookObject並將此數據收集到其他方式。在sax解析之後使用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... 
 
}

我的問題是,我收集XML數據單項進入 「parseBookObject」 的處理程序中。我不知道如何我可以返回對象到方法「parseISBN(fileObject)」在這個方法我想要使用收集到的信息的數據。

之前我想給對象「bookObject」的處理程序收集XML數據到這些對象,並將它放回。我不能給任何其他對象從xmlReader或解析器處理程序?! 然後,我在Handler中創建了一個名爲「parserBookObject」的新對象,並在收集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