繁体   English   中英

解析XML android抛出异常

[英]Parsing XML android throwing exception

我正在尝试在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) 

感谢您的任何帮助,您可以提供!

您需要使用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> ,使整个文件合并。

暂无
暂无

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

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