解析XML android抛出异常

时间:2014-06-18 18:44:49

标签: java android xml

我正在尝试在android中解析下面的XML,但我遇到了一个问题:

<?xml version="1.0" encoding="utf-8"?>
<ServerInformation>
    <ConnectionInfo>
        <Command>ConnectToServer</Command>
    </ConnectionInfo>
    <Devices>
        <Device>
            <Hostname>Android1</Hostname>
            <IP>127.0.0.1</IP>
            <MAC>hello</MAC>
            <TCPSocket>100</TCPSocket>
        </Device>
        <Device>
            <Hostname>Android2</Hostname>
            <IP>127.0.0.1</IP>
            <MAC>helo1</MAC>
            <TCPSocket>200</TCPSocket>
        </Device>
    </Devices>
</ServerInformation>

我不需要在XML中找到所有内容的值。我只是检查主机名和IP,但是当它到达MAC时它会引发异常。

以下是我用来解析XML的代码:

try
        {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser xpp = factory.newPullParser();
            xpp.setInput(new StringReader(xmlWriter.returnXmlOutput()));

            int eventType = xpp.getEventType();
            String tagName = xpp.getName();
            while (eventType != XmlPullParser.END_DOCUMENT)
            {
                tagName = xpp.getName();
                if (tagName != null)
                {
                    if (tagName.equalsIgnoreCase("Command"))
                    {
                        Log.d("Command", xpp.nextText());
                    }
                    else if (tagName.equalsIgnoreCase("Hostname"))
                    {
                        Log.d("Hostname", xpp.nextText());
                    }
                    else if (tagName.equalsIgnoreCase("IP"))
                    {
                        Log.d("IP", xpp.nextText());
                    }

                }
                xpp.nextTag();
            }
        }
        catch (Exception ex)
        {
            Log.e("XML Exception", ex.toString());
        }

以下是我得到的例外情况:

06-18 18:43:55.168: E/XML Exception(2134): org.xmlpull.v1.XmlPullParserException: unexpected type (position:TEXT hello@9:14 in java.io.StringReader@5271e300) 

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:2)

您需要使用getText方法而不是nextText,因为您需要标记的内容,而不是下一个文本。

另外,请使用以下格式:

    while (eventType != XmlPullParser.END_DOCUMENT){
            tagName = xpp.getName();
            if(eventType == XmlPullParser.START_TAG){
                if (tagName != null){
                    if (tagName.equalsIgnoreCase("Command")){
                        Log.d("Command", xpp.getText());
                    }
                    ...
                }
            }
            eventType = xpp.next();
        }

添加一个根元素,例如<Configuration>,它可以整合整个文件。