Android XmlPullParser获取子节点

Android XmlPullParser获取子节点,android,xmlpullparser,Android,Xmlpullparser,我正在使用Android的XmlPullParser处理OpenStreetMap(.osm)文件。我遇到的问题是: <way id='-13264' action='modify' visible='true'> <nd ref='-13252' /> <nd ref='-13251' /> <nd ref='-13249' /> </way> 我需要处理每个way-node中的nd-node,一

我正在使用Android的XmlPullParser处理OpenStreetMap(.osm)文件。我遇到的问题是:

  <way id='-13264' action='modify' visible='true'>
    <nd ref='-13252' />
    <nd ref='-13251' />
    <nd ref='-13249' />
  </way>

我需要处理每个way-node中的nd-node,一次一个way-node(这是关键),精确地说,在这些节点之间创建特定的数据结构。
在XmlPullParser中似乎没有方便的方法来获取一个节点的所有子节点,因此我在这些节点上尝试了很多嵌套的if/elseif-stuff,但无法使其工作。有人能给我提供一些示例代码来处理节点的子节点,但要将类似父节点的子节点分开吗?

您可以使用以下代码:

    int eventType=parser.getEventType();
    while(eventType!=XmlPullParser.END_DOCUMENT){
         if(eventType==XmlPullParser.START_TAG 
               && parser.getName().equals("nd"){
              //process your node...
         }
         parser.next();
    }

这就是我将如何解析这个。您可以自由使用它,但是您必须自己为
方式
类提出实现:)

List allWays=new ArrayList();
方式;
int事件类型;
while((eventType=parser.getEventType())!=XmlPullParser.END\u文档){
if(eventType==XmlPullParser.START_标记){
if(“nd”.equals(parser.getName()){
addNd(parser.getAttributeValue(0));
}
else if(“way”.equals(parser.getName()){
路=新路();
}
}
else if(eventType==XmlPullParser.END_标记){
if(“way”.equals(parser.getName()){
allWays.add(way);
}
}
parser.next();
}

当然,如果提供给您的xml稍微有点不同,那么这个确切的代码可能不起作用。再次,我将把它作为提问者的练习。

我会做一些不同的事情,但这给了我正确的方向。谢谢!@Ascorbin,我面临着同样的问题,我是XmlPullParsing的新手,请帮助我。我已经发布了我的问题pl轻松检查这个我面临着同样的问题来到这里寻找完全相同的东西,没有失望。仅供参考,我刚刚从jdk/adk@spy中打开了我的util,用于读取osm.bz2文件看起来不错,谢谢分享!请帮助我
List<Way> allWays = new ArrayList<Way>();
Way way;
int eventType;
while((eventType = parser.getEventType())!=XmlPullParser.END_DOCUMENT){
    if(eventType==XmlPullParser.START_TAG) {
        if("nd".equals(parser.getName()) {
            way.addNd(parser.getAttributeValue(0));
        }
        else if("way".equals(parser.getName()) {
            way = new Way();
        }
    }
    else if(eventType==XmlPullParser.END_TAG) {
        if("way".equals(parser.getName()) {
            allWays.add(way);
        }
    }
    parser.next();
}