2011-09-15 23 views
6

Tôi cố gắng phân tích cú pháp tệp XML bằng trình phân tích cú pháp XML của StAX. Nó cung cấp cho tôi sự kiện START_ELEMENTEND_DOCUMENT nhưng không có sự kiện ATTRIBUTE. Làm cách nào tôi có thể nhận được sự kiện ATTRIBUTE với trình phân tích cú pháp StAX?Làm cách nào để nắm bắt các sự kiện thuộc tính với trình phân tích cú pháp XML của StAX?

XML của tôi:

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

My Stax XML-phân tích cú pháp:

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

} 

Trả lời

3

Toàn bộ thuộc tính thậm chí là một điều kỳ quặc, và như Blaise đã đề cập, họ không được báo cáo riêng biệt khi sử dụng giao diện dựa trên sự kiện. Điều này bởi vì các thuộc tính là "một phần của" phần tử bắt đầu, và cần phải được xử lý như vậy bởi các trình phân tích cú pháp (để xác minh tính duy nhất, ràng buộc các không gian tên vv).

Các vấn đề liên quan