2016-09-29 2 views
0

Je crée une méthode qui va analyser un fichier XML sur Java 8. Je vais travailler mais je ne peux pas utiliser le parseBookObject et les données collectées d'autres façons.Utilisation de l'objet Java après l'analyse syntaxique

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... 
 
}

Mon problème sont, que je collectionne les XML Datas dans "parseBookObject" à l'intérieur du gestionnaire. Je ne sais pas comment je peux retourner l'objet à la méthode "parseISBN (fileObject)" dans cette méthode je veux utiliser les données des informations collectées. Avant de donner l'objet "bookObject" au Handler pour collecter des données XML à ces objets, je vais le renvoyer. Je ne peux pas donner un autre objet de xmlReader ou de Parser à Handler ?! Ensuite, j'ai créé un nouvel objet dans Handler appelé "parserBookObject" et je veux après recueillir les données redonner à la méthode "parseISBN (fileObject)".

Vous savez comment je peux faire ça?

Merci

Répondre

0

magasin l'instance Marc21Handler dans une variable locale et de retour le champ après avoir terminé l'analyse syntaxique.

Quelque chose comme ça:

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; 
} 

Mais vous voudrez peut-être faire pour vous une faveur et d'utiliser quelque chose de différent, comme JAXB/Xstream/Jackson. Peut-être même Stax si vous insistez pour utiliser un analyseur de streaming.

+0

Merci pour votre aide. Ce sera le travail maintenant. – mj44

0

Créez l'objet Marc21Handler comme un champ de la classe, puis ajoutez une méthode à cette classe, comme getBookObject() qui renvoie l'objet que vous avez analysé. Appelez cette méthode de parseISBN()

+0

Merci pour votre aide. Ce sera le travail maintenant. – mj44