在sax解析之后使用Java对象

问题描述:

我创建了一个将在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)”方法后想要。

知道任何人我怎么能做到这一点?

感谢

存储在一个局部变量的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

创建Marc21Handler对象作为类的字段,然后向该类中添加一个方法,如getBookObject(),该方法返回您解析的对象。从parseISBN()拨打该方法

+0

感谢您的帮助。这将是现在的工作。 – mj44