2011-09-15 11 views
6

Próbuję przeanalizować plik XML za pomocą analizatora składni XML StAX. Daje mi to zdarzenia START_ELEMENT i , ale nie ma zdarzeń. Jak mogę odbierać zdarzenia ATTRIBUTE przy pomocy analizatora StAX?Jak przechwycić zdarzenia Attribute za pomocą analizatora składni XML StAX?

Moje XML:

<?xml version="1.0" encoding="utf-8"?> 
    <posts> 
     <row name="Jonas"/> 
     <row name="John"/> 
    </posts> 

Moja StAX XML parser:

public class XMLParser { 

    public void parseFile(String filename) { 
     XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2.newInstance(); 
     xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.FALSE); 
     xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE); 
     xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE); 
     xmlif.configureForSpeed(); 

     XMLStreamReader2 xmlr = (XMLStreamReader2) 
       xmlif.createXMLStreamReader(new FileInputStream(filename)); 

       int eventType; 
       while(xmlr.hasNext()) { 
        eventType = xmlr.next(); 
        switch(eventType) { 
        case XMLStreamConstants.START_ELEMENT: 
         if(xmlr.getName().toString().equals("row")) { 
          System.out.println("row"); 
         } 
         break; 
        case XMLStreamConstants.ATTRIBUTE: 
         System.out.println("Attribute"); 
         break; 
        case XMLStreamConstants.END_DOCUMENT: 
         System.out.println("END"); 
         xmlr.close(); 
         break; 
        } 
       } 

    } 

    public static void main(String[] args) { 
     XMLParser p = new XMLParser(); 
     String filename = "data/test.xml"; 
     p.parseFile(filename); 
    } 

} 

Odpowiedz

3

Cały atrybuty nawet to dziwne, jak wspomniano Blaise, nie są odrębnie przy użyciu interfejsu opartego na zdarzeniu. To dlatego, że atrybuty są "częścią" elementu startowego i muszą być traktowane jako takie przez parsery (aby zweryfikować unikalność, powiązać przestrzenie nazw itp.).

Powiązane problemy