简体   繁体   English

XML解析类强制转换异常

[英]XML parsing class cast exception

<xml>
<Table_Info>
<SeenStatus>0</SeenStatus>
<NewLimit>0</NewLimit>
</Table_Info>
</xml>

this is data i am getting from server end and the code to parse it is as follow- 这是我从服务器端获取的数据,解析它的代码如下-

            DocumentBuilderFactory dbf = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("Table_Info");

            /** Assign textview array length by arraylist size */

            System.out.println(".....prinyt user data..." + url);

            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);

                Element fstElmnt = (Element) node;

                NodeList costList1 = fstElmnt.getElementsByTagName("SeenStatus");
                Element costElement1 = (Element) costList1.item(0);
                costList1 = costElement1.getChildNodes();
                seen_stat_server = ((Node) costList1.item(0)).getNodeValue();
                String mchaal = min_chaal;
                System.out.println("...prinyt user data....." + min_chaal);
                NodeList costList = fstElmnt.getElementsByTagName("NewLimit");
                Element costElement = (Element) costList1.item(0);
                costList = costElement.getChildNodes();

                min_chaal = ((Node) costList1.item(0)).getNodeValue();
                System.out.println("...prinyt user data....." + total);
                String str2 = total;

now i am getting exception- 现在我越来越例外了

java.lang.ClassCastException: org.apache.harmony.xml.dom.TextImpl cannot be cast to org.w3c.dom.Element java.lang.ClassCastException:org.apache.harmony.xml.dom.TextImpl无法转换为org.w3c.dom.Element

on this line-> 在这行->

`NodeList costList = fstElmnt.getElementsByTagName("NewLimit");
                    Element costElement = (Element) costList1.item(0);` 

actually i am new to xml parsing so please tell me whats the problem 实际上我是xml解析的新手,所以请告诉我问题是什么

I'll recommend you go for XMLPullParser coz its way faster than SAX and DOM parsers. 我建议您比SAX和DOM解析器更快地使用XMLPullParser。

below is the XMLPullParserHandler class - 下面是XMLPullParserHandler类-

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();
}


}

below is the XMLPullParser class 下面是XMLPullParser类

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();
    }


}

}

I have fetched the xml from assets but u can simply pass the returned response Inputstream to parse it successfully. 我已经从资产中获取了xml,但是您可以简单地传递返回的响应Inputstream来成功解析它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM