以下是解密加密值后得到的xml内容
<card order_no="1" id="cmpe0rhm3ym5ha8wlqp4jt7u" place="HOME">33</card>
现在我在名为message的字符串中有上述内容。
现在我想使用主标签&#34; card&#34;解析id和place等值。和号码 &#34; 33&#34;还要解析。
以下是我的尝试
InputStream inputStream = new ByteArrayInputStream(message.getBytes());
XmlPullParser cardParser = Xml.newPullParser();
cardParser.setInput(inputStream, null);
Map<String, String> attrs = XMLParsers.getAttributes(cardParser);
String cardTag = cardParser.getName();
if (cardTag.equalsIgnoreCase("card"))
{
CardTag card = new CardTag();
card.setId(attrs.get("id"));
card.setPlace(attrs.get("place"));
card.setCardNumericValue(cardParser.getText());
return card;
}
我已将字符串存储在InputStream中并再次尝试解析它,但我得到一个空指针异常
当我打印它时,String cardTag的值似乎为null。 如果条件为&#34; if(cardTag.equalsIgnoreCase(&#34; card&#34;))&#34;
,则NullPointerException上升如何做到这一点
答案 0 :(得分:0)
文档says
对于START_TAG或END_TAG事件,当前的(本地)名称 启用名称空间时返回元素。命名空间时 处理被禁用,返回原始名称。对于ENTITY_REF 事件,返回实体名称。 如果当前事件不是 START_TAG,END_TAG或ENTITY_REF,返回null 。
所以,我相信你当前的事件是START_DOCUMENT,你需要调用cardParser.next()来获得下一个开始标记事件。请看一下示例
public class SimpleXmlPullApp{
public static void main (String args[])
throws XmlPullParserException, IOException
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput( new StringReader ( "<foo>Hello World!</foo>" ) );
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
System.out.println("Start tag "+xpp.getName());
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+xpp.getName());
} else if(eventType == XmlPullParser.TEXT) {
System.out.println("Text "+xpp.getText());
}
eventType = xpp.next();
}
System.out.println("End document");
}
}
<强>输出强>
Start document
Start tag foo
Text Hello World!
End tag foo
End document