簡體   English   中英

如何使用StAX XML解析器捕獲Attribute-events?

[英]How to catch Attribute-events with a StAX XML-parser?

我嘗試使用StAX XML解析器解析XML文件。 它給了我START_ELEMENTEND_DOCUMENT事件但沒有ATTRIBUTE事件。 如何使用StAX解析器接收ATTRIBUTE事件?

我的XML:

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

我的StAX XML解析器:

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

}

當您處於START_ELEMENT狀態時,可以獲取屬性。 請參閱XMLStreamReader上的getAttribute*方法:

整個ATTRIBUTE甚至是一件奇怪的事情,正如Blaise所說,使用基於事件的界面時不會單獨報告它們。 這是因為屬性是start元素的“一部分”,需要由解析器處理(以驗證唯一性,綁定名稱空間等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM