在使用StAX和XMLStreamReader读取XML文件时,我遇到了一个奇怪的问题.不确定它是错误还是我做错了什么.还在学习StAX.
所以问题是,
XMLStreamConstants.CHARACTERS事件中,当我收集节点文本作为XMLStreamReader.getText()方法.ABC & XYZ只返回ABC简化的Java源码:
// Start StaX reader
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
try {
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(inStream);
int event = xmlStreamReader.getEventType();
while (true) {
switch (event) {
case XMLStreamConstants.START_ELEMENT:
switch (xmlStreamReader.getLocalName()) {
case "group":
// Do something
break;
case "source":
isSource = true;
break;
case "target":
isTarget = true;
break;
default:
isSource = false;
isTrans = false;
break;
}
break;
case XMLStreamConstants.CHARACTERS:
if (srcData != null) {
String srcTrns = xmlStreamReader.getText();
if (srcTrns != null) {
if (isSource) {
// Set source text
isSource = false;
} else if (isTrans) {
// Set target text
isTrans = false;
}
}
}
break;
case XMLStreamConstants.END_ELEMENT:
if (xmlStreamReader.getLocalName().equals("group")) {
// Add to return list
}
break;
}
if (!xmlStreamReader.hasNext()) {
break;
}
event = xmlStreamReader.next();
}
} catch (XMLStreamException ex) {
LOG.log(Level.WARNING, ex.getMessage(), MessageFormat.format("{0} {1}", ex.getCause(), ex.getLocation()));
}
Run Code Online (Sandbox Code Playgroud)
我不太确定我到底做错了什么或如何收集节点的完整文本.
任何建议或提示对于继续学习StAX更有帮助.:-)
经过努力和研究后,我已经解决了这个问题.
阅读带有转义实体引用的文本是一个问题.你需要设置
XMLInputFactory IS_COALESCING为true
XMLInputFactory.setProperty(XMLInputFactory.IS_COALESCING, true);
Run Code Online (Sandbox Code Playgroud)
基本上,这告诉解析器用它们各自的替换文本(换句话说,像解码之类的东西)替换内部实体引用,并将它们作为普通字符读取.
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |