7 Stimmen

Wie fängt man Attribut-Ereignisse mit einem StAX XML-Parser ab?

Ich versuche, eine XML-Datei mit einem StAX XML-Parser zu parsen. Er gibt mir START_ELEMENT y END_DOCUMENT Ereignisse, aber keine ATTRIBUTE Veranstaltungen. Wie kann ich erhalten ATTRIBUTE Ereignisse mit dem StAX-Parser?

Mein XML:

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

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

}

6voto

bdoughan Punkte 144925

Sie können die Attribute erhalten, wenn Sie sich in der START_ELEMENT Zustand. Siehe die getAttribute* Methoden zu XMLStreamReader :

4voto

StaxMan Punkte 107669

Das ganze ATTRIBUTEs sogar ist eine seltsame Sache, und wie Blaise erwähnt, sind sie nicht separat gemeldet, wenn mit Ereignis-basierte Schnittstelle. Das liegt daran, dass Attribute "Teil" des Startelements sind und als solche von Parsern behandelt werden müssen (um die Eindeutigkeit zu überprüfen, Namespaces zu binden usw.).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X