我有这个xml:
<xml><result>-1</result></xml>
以及以下java代码:
public String findElement(String xml, String elem) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader (xml) );
while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
if (xpp.getName().equals(elem)) {
return xpp.getText();
}
xpp.next();
}
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
return null;
}
但xpp.getName()
返回null而不是"result"
。结果NullPointerException
被抛出。
我哪里错了?
答案 0 :(得分:1)
像这样更改您的代码。
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equals(elem)) {
eventType = xpp.next(); // advance to inner text
return xpp.getText();
}
}
eventType = xpp.next();
}
答案 1 :(得分:1)
当然你需要检查一些更多的条件,比如如果没有文本或标签包含另一个嵌套标签......
public String findElement(String xml, String elem) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader(xml));
while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
final int event = xpp.getEventType();
if (event == XmlPullParser.START_TAG && xpp.getName().equals(elem)) {
xpp.next();
return xpp.getText();
}
xpp.next();
}
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
return null;
}
和这个
if (event == XmlPullParser.START_TAG && xpp.getName().equals(elem)) {
xpp.next();
if (xpp.getEventType() == XmlPullParser.TEXT) {
return xpp.getText();
}
}else{
xpp.next();
}
适用于嵌套的内容,如
"<xml><result><noway><result>-1</result></noway></result></xml>"