[英]Unable to unmarshal the XML to my class using the XMLEventReader
[英]Unable to check CDATA in XML using XMLEventReader in Stax
我無法檢查 XML 中的 CDATA 並使用 XMLEventReader 讀取它。
以下是示例:
<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() 的錯誤信息。 想知道如何在 EventReader 中檢查 CDATA 並獲取 CDATA。
使用以下模式:
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)
設置該屬性,否則 reader 將忽略 CDATA 的事件類型。
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.STAX_REPORT_CDATA_EVENT,Boolean.TRUE);
請參閱 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl,第 3027 行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.