2016-12-28 6 views
1

XMLでCDATAをチェックしてXMLEventReaderで読み取ることができません。StaxでXMLEventReaderを使用してXMLの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> 

次のように私が使用していますスタックスの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; 
     } 

完全なサンプル:

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

/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> 

では与える:

Sat Nov 19 18:50:15 2016 (1672822)        
Sat, 19 Nov 2016 18:50:14 -0800 (PST)  
関連する問題