0

为了设置场景,我目前正在开发一个适用于 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:因为我没有说清楚,细节的子节点在 XML 文件之间发生变化,我必须在它们到来时处理它们......

我正在使用 DOM 解析器,并提取了一个NodeList基于<Detail>. NodeList.item(0)给了我<Detail>节点,但是如果我然后尝试将其分解(getChildNodes()例如),我将无法获得<VIN>or的标签名称<RegNo>。事实上,我似乎无法为它们获得任何类型的参考,我可以使用它们来根据原始名称确定它是哪个节点。

有人有什么想法吗?

4

2 回答 2

0

Names of child nodes:

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());
                       }
                }
            }
        }

To get value of a node I use this getValue() method (I forgot where I found this solution so sadly I can't give credit to the person who made it):

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;
    } 
于 2012-06-22T10:53:06.327 回答
0

好的..正如您解释的那样,您可以达到详细标签..尝试这样做...

// 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 的所有子标签执行此操作...希望这会对您有所帮助..!!!

于 2012-06-22T11:01:23.810 回答