我正在使用 java stax XMLStreamReader 来读取 xml。我想抓取某些内部节点的整个字符串。
XML:
<example>
<ignoreMe>
<bla></bla>
</ignoreMe>
<getMe>
<data></data>
</getMe>
</example>
我只是希望能够获取字符串中的整个内部 getMe 节点。 IE:
<getMe>
<data></data>
</getMe>
这是我所拥有的..但我被困住了:
XMLStreamReader parser = factory.createXMLStreamReader(new FileReader(file));
for (int event = parser.next();
event != XMLStreamConstants.END_DOCUMENT;
event = parser.next()) {
switch (event) {
case XMLStreamConstants.START_ELEMENT:
if (parser.getLocalName().equals("GetMe")) {
//??????????????????
最佳答案
我上周开始学习 StaX,但如果您仍在寻找问题的答案,这可能会对您有所帮助:
XMLInputFactory xmlif = XMLInputFactory.newInstance();
xmlif.setProperty(XMLInputFactory.IS_COALESCING, true);
XMLStreamReader xmlsr;
String resultat="";
boolean isGetme=false;
try {
xmlsr = xmlif.createXMLStreamReader(new FileReader("lib/toto.xml"));
int eventType;
while (xmlsr.hasNext()) {
eventType = xmlsr.next();
switch (eventType) {
case XMLStreamConstants.START_ELEMENT:
if(xmlsr.getLocalName().equals("getMe")){
isGetme=true;
}
if(isGetme){
resultat+="<"+xmlsr.getLocalName()+">";
}
break;
case XMLStreamConstants.CHARACTERS:
if(isGetme){
resultat+=xmlsr.getText();
}
break;
case XMLStreamConstants.END_ELEMENT:
if(xmlsr.getLocalName().equals("getMe")){
resultat+="</"+xmlsr.getLocalName()+">";
isGetme=false;
}
if(isGetme && !xmlsr.getLocalName().equals("getMe")){
resultat+="</"+xmlsr.getLocalName()+">";
}
break;
default:
break;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
System.out.println(resultat);
这段代码将获取所有内部节点和文本内容,并将其存储到一个字符串中。 即:
<getMe>
<data>test</data>
</getMe>
但是,这段代码相当“丑陋”,并且肯定不是您正在寻找的最佳解决方案,JDOM 可能更适合您的需求。
关于java stax 获取内部节点的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149183/