我正在尝试在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)
感谢您提供的任何帮助!
答案 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>
,它可以整合整个文件。