我有一个xml文件,我试图把文本放在< _3-auto>节点使用stax xml解析器。文本在任何节点内都不正确,因此stax无法获取该值。是否有其他方法可以使用stax获取值。
<_3-auto>
<prefix>
<autonum>(3)</autonum>
</prefix>
Remove the rear fuselage support from FS755.00 of the aircraft.
</_3-auto>
<_3-auto>
<prefix>
<autonum>(4)</autonum>
</prefix>
Put the hydraulic scissor lift (1) under the nose ballast assembly (2).
</_3-auto>
这是我编写的用于获取_3-auto节点内文本的代码。
try {
XMLInputFactory inputFactory;
inputFactory = XMLInputFactory.newInstance();
InputStream inputStream = new FileInputStream(filePath);
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(inputStream);
while (streamReader.hasNext()) {
int event = streamReader.next();
if (event == XMLStreamConstants.START_ELEMENT) {
if (streamReader.getLocalName().equals("_3-auto")) {
String auto = streamReader.getElementText();
System.out.println(auto);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
您不应该使用getElementText()
,因为文档说它适用于纯文本元素。
您需要做的是从XMLStreamConstants.CHARACTERS
节点监视<_3-auto>
事件。一种简单的方法是在解析中处理上下文,以了解您何时处于此类节点中。在这种情况下,我做了一个简单的假设,即在<_3-auto>
StartElement事件之后或 </prefix>
EndElement事件后,您在此节点中:
boolean current3AutoNode = false;
while (streamReader.hasNext()) {
int event = streamReader.next();
if (event == XMLStreamConstants.START_ELEMENT) {
if (streamReader.getLocalName().equals("_3-auto")) {
current3AutoNode = true;
}
else {
current3AutoNode = false;
}
}
else if (event == XMLStreamConstants.END_ELEMENT) {
if (streamReader.getLocalName().equals("prefix")) {
current3AutoNode = true; // after end of </prefix> we are back in <_3-auto> node
}
else {
current3AutoNode = false;
}
}
if (event == XMLStreamConstants.CHARACTERS && current3AutoNode) {
// these are the characters inside <_3-auto> </_3-auto>
String characters = streamReader.getText();
System.out.println(characters);
}
}
这将打印“从飞机FS755.00上拆下后机身支架”。和“将液压剪叉式升降机(1)放在机头压载组件(2)下面。”文本,还有一些可以过滤掉的空白字符。