Android XML解析类强制转换异常
实际上,我对xml解析还不熟悉,所以请告诉我问题出在哪里我建议您使用XMLPullParser,因为它比SAX和DOM解析器更快 下面是XMLPullParserHandler类-Android XML解析类强制转换异常,android,xml-parsing,classcastexception,Android,Xml Parsing,Classcastexception,实际上,我对xml解析还不熟悉,所以请告诉我问题出在哪里我建议您使用XMLPullParser,因为它比SAX和DOM解析器更快 下面是XMLPullParserHandler类- `NodeList costList = fstElmnt.getElementsByTagName("NewLimit"); Element costElement = (Element) costList1.item(0);` 下面是XMLPullParser类 pub
`NodeList costList = fstElmnt.getElementsByTagName("NewLimit");
Element costElement = (Element) costList1.item(0);`
下面是XMLPullParser类
public class XmlPullParserHandler {
String text;
StringBuilder builder = new StringBuilder();
public String parse(InputStream is) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("SeenStatus")) {
builder.append("SeenStatus = " + text);
} else if (tagname.equalsIgnoreCase("NewLimit")) {
builder.append("\nNewLimit = " + text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return builder.toString();
}
}
我已从资产中获取xml,但您只需传递返回的响应Inputstream即可成功解析它。Change
Element costElement=(Element)costList1.item(0)代码>到元素成本元素=(元素)成本列表。项目(0)代码>和获取问题的行元素costElement=(元素)costList1.项(0)代码>这一行有错误,有两个子标记,因此两个元素costElement
和costElement1
都是必需的。我认为这个问题是由于服务器端的某些数据类型问题造成的……是的,问题解决了,这个问题是由于服务器端的一些数据类型问题引起的…在服务器端做了一些更改,谢谢我会尝试,但实际上我的问题是强制转换异常。。使用XMLPullParser它会消失吗?@sud:我已经解析了你在Q中提到的xml,它解析成功了。
`NodeList costList = fstElmnt.getElementsByTagName("NewLimit");
Element costElement = (Element) costList1.item(0);`
public class XmlPullParserHandler {
String text;
StringBuilder builder = new StringBuilder();
public String parse(InputStream is) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.TEXT:
text = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("SeenStatus")) {
builder.append("SeenStatus = " + text);
} else if (tagname.equalsIgnoreCase("NewLimit")) {
builder.append("\nNewLimit = " + text);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return builder.toString();
}
}
public class XMLPullParser extends AppCompatActivity {
TextView txtXML;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xmlpull_parser);
txtXML = (TextView) findViewById(R.id.txtXML);
try {
XmlPullParserHandler parser = new XmlPullParserHandler();
InputStream is = getAssets().open("sampleXML.xml");
String xmlOutput = parser.parse(is);
txtXML.setText(xmlOutput);
} catch (IOException e) {
e.printStackTrace();
}
}
}