Android,XMLParser - 读取XML

问题描述:

即时尝试从我的Android应用程序中的Web服务器读取XML,但我不知道如何搜索标签,我看到的所有示例都与我的不同:Android,XMLParser - 读取XML

<document>  
<producer/> 
<metadata></metadata> 

<recorddata count="111"> 
<row> 
<field name="numint" value="MTAwMQ=="/> 
<field name="Grupo" value="NQ=="/> 
<field name="Link" value="Q29ycmllbnRlcw=="/> 
<field name="Nombre" value="Q29ycmllbnRlcw=="/> 
<field name="Valor" value="MzQwMC4wMA=="/> 
</row> 
</recorddata> 
</document> 

我需要阅读里面RECORDATA行了,但是我不知道如何解决这个问题,这是我的代码:

private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException 
    { 
     ArrayList<Record> Records = null; 
     int eventType = parser.getEventType(); 
     Record currentRecord = null; 
     while (eventType != XmlPullParser.END_DOCUMENT){ 
      String name = null; 
      switch (eventType){ 
       case XmlPullParser.START_DOCUMENT: 
        Records = new ArrayList(); 
        break; 
       case XmlPullParser.START_TAG: 
        name = parser.getName(); 
        if (name == "row"){ 
         currentRecord = new Record(); 
        } else if (currentRecord != null){ 
         if (name == "numint"){ 
          currentRecord.numint = parser.getText(); 
         } else if (name == "Grupo"){ 
          currentRecord.group = parser.getText(); 
         } else if (name == "Link"){ 
          currentRecord.link= parser.getText(); 
         }else if (name == "Nombre") { 
          currentRecord.name= parser.getText(); 
         }else if (name == "Valor") { 
          currentRecord.value= parser.getText(); 
         } 
        } 
        break; 
       case XmlPullParser.END_TAG: 
        name = parser.getName(); 
        if (name.equalsIgnoreCase("row") && currentRecord != null){ 
         Records.add(currentRecord); 
        } 
      } 
      eventType = parser.next(); 
     } 
     printProducts(Records); 
    } 

,但该记录列表在过程结束时清空,并我可以说是做了一些事情,因为有很多记录,需要等待2分钟,直到过程结束。

林不知道,如果使用的getName IM()正确,我应该被检查字段???如果是这样,我怎么知道在哪个领域即时通讯。我应该使用nextToken(),而不是?

+0

我现在意识到gettext的()没有得到任何东西,因为没有文字:p我会尝试做一些修改 –

+0

嗯,我不知道怎么弄的“价值”的属性值:p –

+0

你曾经尝试过使用SAX解析器? – yugidroid

为了让您可以使用该方法的属性:

parser.getAttributeValue(null, "value"); 

定义:

public abstract String getAttributeValue (String namespace, String name) 

从帮助中获取:

*在API级别1。返回的属性值来标识通过命名空间URI和命名空间localName。如果命名空间被禁用,则命名空间必须为空。如果当前事件类型不是START_TAG,则会抛出IndexOutOfBoundsException。*

注意:替换所有字符串比较

name == "row" 

有了:

name.equals("row") 

希望它能帮助。

+0

这实际上确实有所帮助,列表不是空的,但现在我得到所有空值,列表中的每个元素都填充有空值的记录 –

+0

对于例如, 行1: numint:空 组:空 链接:空 名称:空 值:空 –

+0

难道这是因为数据被加密??????? –

我重写我的代码如下问题解决了:

case XmlPullParser.START_TAG: 
        name = parser.getName(); 
        if (name.equals("row")){ 
         currentRecord = new Record(); 
        } else if (currentRecord != null) { 
         if(parser.getName().equals("field")) { 
          if(parser.getAttributeValue(null, "name").equalsIgnoreCase("numint")) { 
           currentRecord.numint = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Grupo")) { 
           currentRecord.group = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Link")) { 
           currentRecord.link = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Nombre")) { 
           currentRecord.name = parser.getAttributeValue(null, "value"); 
          }else if (parser.getAttributeValue(null, "name").equalsIgnoreCase("Valor")) { 
           currentRecord.value = parser.getAttributeValue(null, "value"); 
          } 
         } 
        } 
        break; 

考虑的东西通过Andreaoid答案,和一点点的调整,我可能没有问题,读去的xml文件

+0

如果有帮助,您能否确认答案并进行投票?谢谢。 –