Partage
  • Partager sur Facebook
  • Partager sur Twitter

lire du xml avec nextEvent

    26 janvier 2012 à 16:36:16

    Salut,

    il y a un truc que je ne comprend pas dans ce code, qui parse un fichier xml :

    le xml :
    <?xml version="1.0" encoding="UTF-8"?>
    <config>
    	<item date="January 2009">
    		<mode>1</mode>
    		<unit>900</unit>
    		<current>1</current>
    		<interactive>1</interactive>
    	</item>
    	<item date="February 2009">
    		<mode>2</mode>
    		<unit>400</unit>
    		<current>2</current>
    		<interactive>5</interactive>
    	</item>
    	<item date="December 2009">
    		<mode>9</mode>
    		<unit>5</unit>
    		<current>100</current>
    		<interactive>3</interactive>
    	</item>
    </config>
    


    dans ce code Java, dans le premier if (dans la boucle while) on prend l'item et ses attributs,
    on continue à vérifier les "if" mais, aucun des "if" ne marche. (dîtes moi si je me trompe)
    on revient donc au "while",
    on arrive à la balise suivante "mode" grâce à "nextEvent",
    on recommence donc, le 1er "if" global ok, le 1er sous-"if" ne fonctionne pas (ITEM) on le saute, on arrive au 2e "if" (MODE), mais là on recommence avec un ---> event = eventReader.nextEvent(); . Et on refait ce nextEvent() à chaque fois pour chaque nouvelle balise, ce que je ne comprends pas, car avant les "if", on a déjà appelé la balise suivante avec ce nextEvent ..

    public List<Item> readConfig(String configFile) {
    		List<Item> items = new ArrayList<Item>();
    		try {
    			// First create a new XMLInputFactory
    			XMLInputFactory inputFactory = XMLInputFactory.newInstance();
    			// Setup a new eventReader
    			InputStream in = new FileInputStream(configFile);
    			XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
    			// Read the XML document
    			Item item = null;
    
    			while (eventReader.hasNext()) {
    				XMLEvent event = eventReader.nextEvent();
    
    				if (event.isStartElement()) {
    					StartElement startElement = event.asStartElement();
    					// If we have a item element we create a new item
    					if (startElement.getName().getLocalPart() == (ITEM)) {
    						item = new Item();
    						// We read the attributes from this tag and add the date
    						// attribute to our object
    						Iterator<Attribute> attributes = startElement
    								.getAttributes();
    						while (attributes.hasNext()) {
    							Attribute attribute = attributes.next();
    							if (attribute.getName().toString().equals(DATE)) {
    								item.setDate(attribute.getValue());
    							}
    
    						}
    					}
    
    					if (event.isStartElement()) {
    						if (event.asStartElement().getName().getLocalPart()
    								.equals(MODE)) {
    							event = eventReader.nextEvent();
    							item.setMode(event.asCharacters().getData());
    							continue;
    						}
    					}
    					if (event.asStartElement().getName().getLocalPart()
    							.equals(UNIT)) {
    						event = eventReader.nextEvent();
    						item.setUnit(event.asCharacters().getData());
    						continue;
    					}
    
    					if (event.asStartElement().getName().getLocalPart()
    							.equals(CURRENT)) {
    						event = eventReader.nextEvent();
    						item.setCurrent(event.asCharacters().getData());
    						continue;
    					}
    
    					if (event.asStartElement().getName().getLocalPart()
    							.equals(INTERACTIVE)) {
    						event = eventReader.nextEvent();
    						item.setInteractive(event.asCharacters().getData());
    						continue;
    					}
    				}
    				// If we reach the end of an item element we add it to the list
    				if (event.isEndElement()) {
    					EndElement endElement = event.asEndElement();
    					if (endElement.getName().getLocalPart() == (ITEM)) {
    						items.add(item);
    					}
    				}
    
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (XMLStreamException e) {
    			e.printStackTrace();
    		}
    		return items;
    	}
    
    • Partager sur Facebook
    • Partager sur Twitter

    lire du xml avec nextEvent

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown