XML迭代问题(Android/Java)



为了设置场景,我目前正在为Android开发一个XML适配器,该适配器将读取我收到的XML文件,并将它们解析到数据库中。我以为我已经解决了这个问题,直到他们突然告诉我,XML文件中的节点可以从一个文件更改到另一个文件,所以我需要构建一种机制来处理丢失的变量。

对此最明显的解决方案是switch()语句,但它不适用于字符串,所以我开始构建if-then-else结构。其想法是,它将检查节点的名称,并在此基础上确定如何处理它。很简单,不是吗?

问题是,无论我做什么,我似乎都无法从XML文件中提取我需要的节点的名称。XML文件的结构如下:

<Vehicle>
    <Detail>
        <VIN>BBB2791276393</VIN>
        <RegNo>KN05EAP</RegNo>
        <Doors>5</Doors>
    </Detail>
</Vehicle>

我需要能够比较的是像"VIN"或"RegNo"这样的标签名称,但我无法找到将它们提取出来的方法。ETA:由于我没有弄清楚,Detail的子节点在XML文件之间会发生变化,我必须在它们出现时处理它们。。。

我使用了一个DOM解析器,并在<Detail>的基础上提取出一个NodeListNodeList.item(0)为我提供了<Detail>节点,但如果我尝试将其分解(例如使用getChildNodes()(,我将无法获得<VIN><RegNo>的标签名称。事实上,我似乎找不到任何可以用来确定基于原始名称的节点的引用。

有人有什么想法吗?

好的。。正如您所解释的,您可以访问Detail标签。。试着这样做。。。

// Getting VIN of Detail
 if (element.getElementsByTagName("VIN").getLength() > 0) {
        childNode = element.getElementsByTagName("VIN").item(0); //Get all the elements one by one
        String VIN = childNode.getFirstChild().getNodeValue();
    }

您可以为Detail的所有子标签执行此操作。。。希望这能帮助你。。!!!

子节点名称:

Element elem = (Element)nodeList.item(0);
        Node child;
        if( elem != null){
                if (elem.hasChildNodes()){
                   for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                       if( child.getNodeType() == Node.ELEMENT_NODE  ){
                           Log.i("fff", child.getNodeName());
                       }
                }
            }
        }

为了获得节点的值,我使用了这个getValue((方法(我忘了在哪里找到了这个解决方案,所以很遗憾,我不能把它归功于制造它的人(:

public String getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        return this.getElementValue(n.item(0));
    }
public final String getElementValue( Node elem ) {
        Node child;
        if( elem != null){
            if (elem.hasChildNodes()){
                for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                    if( child.getNodeType() == Node.TEXT_NODE  ){
                        //child.getNodeName();
                        return child.getNodeValue();
                    }
                }
            }
        }
        return null;
    } 

最新更新