[英]java stax get string of inner node
我正在使用java stax XMLStreamReader讀取xml。 我想獲取某些內部節點的整個字符串。
XML:
<example>
<ignoreMe>
<bla></bla>
</ignoreMe>
<getMe>
<data></data>
</getMe>
</example>
我只希望能夠在String中獲取整個內部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);
此代碼將為您提供所有內部節點和文本內容,並將其存儲到String中。 IE:
<getMe>
<data>test</data>
</getMe>
但是,此代碼非常“丑陋”,並且肯定不是您要查找的最佳解決方案,JDOM可能更適合您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.