我目前正在尝试从我的Android应用中的Web服务器读取XML,但我不知道如何搜索TAGS,我看到的所有示例都与我的不同:
<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()而不是???
答案 0 :(得分: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文件而不会出现问题
答案 1 :(得分:0)
要获取属性,您可以使用以下方法:
parser.getAttributeValue(null, "value");
定义:
public abstract String getAttributeValue (String namespace, String name)
取自帮助:
*在API级别1中添加。返回由名称空间URI和名称空间localName标识的属性值。如果禁用名称空间,则名称空间必须为null。如果当前事件类型不是START_TAG,则抛出IndexOutOfBoundsException。*
注意:替换所有字符串比较!
name == "row"
使用:
name.equals("row")
希望它有所帮助。