2017-02-23 9 views
1

나는 큰 XML 파일을 가지고 있으며, 그 중 일부 요소를 파싱해야한다.Stax 파서를 사용할 때 * start * 및 * end * 태그는 어떻게 정의합니까?

<root> 
    <head> 
     <version>1.1</version> 
    </head> 
    <body> 
     <ele1>value</ele1> 
     <ele2> 
      <suvEle1>value</suvEle1> 
     </ele2> 
     <ele3> 
      <suvEle1>value</suvEle1> 
     </ele3> 
    </body> 
</root> 

<body> 안에있는 모든 요소를 ​​읽고 싶습니다. 하지만 - <body> 태그를 제외하고 - <body> 안에있는 다른 모든 태그는 동적입니다. Stax 파서를 사용할 때 으로 끝내 태그로 정의하는 방법은 무엇입니까?

답변

0

XMLStreamConstants.START_ELEMENTXMLStreamConstants.END_ELEMENT을 사용하여 시작 및 종료 태그를 결정할 수 있습니다. 다음과 같은 것.

import java.io.StringReader; 
import javax.xml.stream.XMLInputFactory; 
import javax.xml.stream.XMLStreamConstants; 
import javax.xml.stream.XMLStreamException; 
import javax.xml.stream.XMLStreamReader; 

public static void testStaxParser() { 
     String xmlSource = "<root>" + 
         "<head>" + 
          "<version>1.1</version>" + 
         "</head>" + 
         "<body>" + 
          "<ele1>value</ele1>" + 
          "<ele2>" + 
           "<suvEle1>value</suvEle1>" + 
          "</ele2>" + 
          "<ele3>" + 
           "<suvEle1>value</suvEle1>" + 
          "</ele3>" + 
         "</body>" + 
        "</root>";  

     try { 
      XMLInputFactory factory = XMLInputFactory.newInstance(); 
      XMLStreamReader reader = 
       factory.createXMLStreamReader(
         new StringReader(xmlSource)); 

      while(reader.hasNext()){ 
       int parseEvent = reader.next(); 

       if (parseEvent == XMLStreamConstants.START_ELEMENT){ 
        if ("body".equals(reader.getLocalName())) { 
         System.out.println("Start of body element."); 
         processElements(reader); 
         return; 
        } 
       } 
      } 
     } 
     catch (Exception e){ 
      e.printStackTrace(System.err); 
     } 

    } 

public static void processElements(XMLStreamReader reader) throws XMLStreamException { 
     do { 
      int parseEvent = reader.next(); 

      switch(parseEvent){ 
       case XMLStreamConstants.START_ELEMENT: 
        System.out.println("Start of element " + reader.getLocalName());     
        break; 

       case XMLStreamConstants.CHARACTERS: 
        System.out.println("Element content is " + reader.getText().trim()); 

        break; 

       case XMLStreamConstants.END_ELEMENT: 
        if ("body".equals(reader.getLocalName())) { 
         System.out.println("End of body element."); 
         return; 
        } 

        System.out.println("End of element " + reader.getLocalName()); 
        break; 
      }   
     } while (reader.hasNext()); 
    }