在閱讀使用StAX和XMLStreamReader的XML文件中,我遇到了一個奇怪的問題。不知道它是否有錯,或者我做錯了什麼。仍在學習StAX。問題越來越XML節點文本中的StAX XMLStreamConstants.CHARACTERS事件
所以問題是,
- 在
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
@Prabhaker葉氏,只是增加了我的代碼的簡化版本,無法加載完整的代碼,它的太多了。謝謝。 – Indigo
對不起,道歉,這不是一個錯誤,它是從節點收集完整文本的問題。 – Indigo