【发布时间】:2014-05-11 22:56:37
【问题描述】:
在使用 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()));
}
我不太确定我到底做错了什么或如何收集节点的完整文本。
任何建议或提示都会对继续学习 StAX 有很大帮助。 :-)
【问题讨论】:
-
能否请您也提供代码和堆栈跟踪...
-
@Prabhaker Yeap,刚刚添加了我的代码的简化版本,无法加载完整的代码,太多了。谢谢。
-
抱歉,抱歉,这不是错误,而是从节点收集完整文本的问题。