android parse xml - Nodelist有太多的对象

时间:2012-02-21 07:13:16

标签: java android xml-parsing

我有这个工作,在某个地方进行了更改,现在我无法追踪错误。

这是情况......当_regionList创建时,xml文件中有13个区域用于我正在使用的区域,但_regionlist / children / array有18个对象。使用不同的区域(50个元素),它创建了60个对象。

当然,数组中的其余对象具有空ID,这就是问题所在。关于如何在其中抛出额外物品的任何想法?

由于

//解析XML文件

public void Parse(InputStream inStream, String inRegion) 
{
    try {
        String _region = inRegion;

        this.cFactory = DocumentBuilderFactory.newInstance();
        this.cBuilder = this.cFactory.newDocumentBuilder();
        this.cBuilder.isValidating();

        Document _document = this.cBuilder.parse(inStream, null);

        _document.getDocumentElement().normalize();

        NodeList _regionList = _document.getElementsByTagName(_region);
        final int _length = _regionList.getLength();

        for (int i = 0; i < _length; i++) {
            final NamedNodeMap _attr = _regionList.item(i).getAttributes();
            final String _regionName = GetNodeValue(_attr, "name");

            // Construct a Region object
            PropertiesRegion _regionObject = new PropertiesRegion(_regionName);

            // Add to list
            this.cList.add(_regionObject);

            Log.d(TAG, _regionObject.toString());
        }
    } 

    catch (SAXException e) 
    {
        e.printStackTrace();
    } 

    catch (IOException e) 
    {
        e.printStackTrace();
    } 

    catch (ParserConfigurationException e) 
    {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:0)

节点列表中的其他元素很可能是等等,因此在继续操作之前检查节点类型,可以帮助您解决问题:

Node node=_regionList.item(i);
if(node.getNodeType()!=3)
{
       final NamedNodeMap _attr = node.getAttributes();
       final String _regionName = GetNodeValue(_attr, "name");

        // Construct a Region object
        PropertiesRegion _regionObject = new PropertiesRegion(_regionName);

        // Add to list
        this.cList.add(_regionObject);

        Log.d(TAG, _regionObject.toString());

}

答案 1 :(得分:0)

ArrayList(集合)中的其他空索引很好。问题出在TextView中,并将其连接到ArrayList。