在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。
创建Marc21Handler对象作为类的字段,然后向该类中添加一个方法,如getBookObject()
,该方法返回您解析的对象。从parseISBN()
拨打该方法
感谢您的帮助。这将是现在的工作。 – mj44
感谢您的帮助。这将是现在的工作。 – mj44