2016-12-28 4 views
1

XML의 CDATA를 검사하고 XMLEventReader를 사용하여 읽을 수 없습니다.XML에서 Stax의 XMLEventReader를 사용하여 CDATA를 확인할 수 없습니다.

<name>HEADERS</name> 
         <data> 
          <![CDATA[ Sat Nov 19 18:50:15 2016 (1672822) 
]]> 
          <![CDATA[Sat, 19 Nov 2016 18:50:14 -0800 (PST)  
]]> 
         </data> 

다음과 내가 사용하고 STAX API의 XMLEventReader에 그대로 : 나는 문자 데이터 태그를 읽을 때

while (eventReader.hasNext()) { 
     XMLEvent event = eventReader.nextEvent(); 

     if (event.isCharacters()) { 
      System.out.println(event.asCharacters().isCData()); 
      System.out.println(event.asCharacters().getData()); 
} 
    } 

그래서, 내가 할

다음

은 샘플입니다 event.asCharacters(). isCData()에 대해 false입니다. EventReader에서 CDATA를 확인하고 CDATA를 얻는 방법을 알고 싶습니다.

답변

0

사용하여 다음과 같은 패턴 :

switch (EventType) { 
     case XMLStreamConstants.CHARACTERS: 
     case XMLStreamConstants.CDATA: 
      System.out.println(r.getText()); 
      break; 
     default: 
      break; 
     } 

전체 샘플 : /path/toYour/sample/file.xml

<data> 
    <![CDATA[ Sat Nov 19 18:50:15 2016 (1672822)]]> 
    <![CDATA[Sat, 19 Nov 2016 18:50:14 -0800 (PST)]]> 
</data> 

import java.io.BufferedInputStream; 
import java.io.FileInputStream; 
import java.io.InputStream; 

import javax.xml.stream.XMLInputFactory; 
import javax.xml.stream.XMLStreamConstants; 
import javax.xml.stream.XMLStreamReader; 

public void readCDATAFromXMLUsingStax() { 
    String yourSampleFile = "/path/toYour/sample/file.xml"; 
    XMLStreamReader r = null; 
    try (InputStream in = 
      new BufferedInputStream(new FileInputStream(yourSampleFile));) { 
     XMLInputFactory factory = XMLInputFactory.newInstance(); 
     r = factory.createXMLStreamReader(in); 
     while (r.hasNext()) { 
      switch (r.getEventType()) { 
      case XMLStreamConstants.CHARACTERS: 
      case XMLStreamConstants.CDATA: 
       System.out.println(r.getText()); 
       break; 
      default: 
       break; 
      } 
      r.next(); 
     } 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } finally { 
     if (r != null) { 
      try { 
       r.close(); 
      } catch (Exception e) { 
       throw new RuntimeException(e); 
      } 
     } 
    } 
} 

가 제공합니다 :

Sat Nov 19 18:50:15 2016 (1672822)        
Sat, 19 Nov 2016 18:50:14 -0800 (PST)