Unable to check CDATA in XML using XMLEventReader in Stax

前端 未结 2 1688
天命终不由人
天命终不由人 2021-01-16 18:02

I am unable to check for CDATA in XML and read it using XMLEventReader.

The following is the sample:

 HEADERS
                       


        
相关标签:
2条回答
  • 2021-01-16 18:19

    Use the following pattern:

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

    Complete sample:

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

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

    Gives:

     Sat Nov 19 18:50:15 2016 (1672822)                             
     Sat, 19 Nov 2016 18:50:14 -0800 (PST)       
    
    0 讨论(0)
  • 2021-01-16 18:41

    Set the property, otherwise reader ignores the event type of CDATA.

    XMLInputFactory factory = XMLInputFactory.newInstance();
    factory.setProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.STAX_REPORT_CDATA_EVENT,Boolean.TRUE);
    

    See com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl, line: 3027

    0 讨论(0)
提交回复
热议问题