0

我目前正在尝试从我的 Android 应用程序中的 Web 服务器读取和 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 中的 ROWS,但我不确定如何解决这个问题,这是我的代码:

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(),我应该检查字段吗???如果是这样,我怎么知道我在哪个领域。我应该改用 nextToken() 吗???

4

2 回答 2

1

我通过重写我的代码解决了这个问题,如下所示:

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 的答案,稍作调整,我可以毫无问题地读取 de xml 文件

于 2013-07-25T14:45:56.473 回答
0

要获取属性,您可以使用以下方法:

parser.getAttributeValue(null, "value");

定义:

public abstract String getAttributeValue (String namespace, String name) 

取自帮助:

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

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

name == "row"

和:

name.equals("row")

希望能帮助到你。

于 2013-07-24T23:44:43.323 回答