XMLPullParser无法检查标记名称

时间:2014-09-13 11:55:51

标签: android android-xmlpullparser

我有这个xml的小文件我想在我的应用程序中读取它并将每个product保存在一个数组中:

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>     
        <productname>Jeans</productname>
        <productcolor>red</productcolor>
        <productquantity>5</productquantity>
    </product>
    <product>     
        <productname>Tshirt</productname>
        <productcolor>blue</productcolor>
        <productquantity>3</productquantity>
    </product>
    <product>     
        <productname>shorts</productname>
        <productcolor>green</productcolor>
        <productquantity>4</productquantity>
    </product>
</products>

我使用此函数在我的Android应用程序中解析xml但最终没有得到产品我无法打印它们:

private void parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
    {
        ArrayList<product> products = null;
        int eventType = parser.getEventType();
        product currentProduct = null;

        while (eventType != XmlPullParser.END_DOCUMENT){
            String name = null;
            switch (eventType){
                case XmlPullParser.START_DOCUMENT:
                    products = new ArrayList<product>();
                    break;
                case XmlPullParser.START_TAG:
                    name = parser.getName();
                    Log.i("MyActivity", name);
                    if (name == "product"){
                        Log.i("MyActivity", "new");
                        currentProduct = new product();
                    } else if (currentProduct != null){
                        if (name == "productname"){
                            currentProduct.name = parser.nextText();
                        } else if (name == "productcolor"){
                            currentProduct.color = parser.nextText();
                        } else if (name == "productquantity"){
                            currentProduct.quantity= parser.nextText();
                        }  
                    }
                    else
                    {
                        Log.i("MyActivity", "old");
                    }
                    break;
                case XmlPullParser.END_TAG:
                    name = parser.getName();
                    if (currentProduct != null){
                        products.add(currentProduct);
                    } 
            }
            eventType = parser.next();
        }

    }

正如您在此函数中注意到的那样,我添加了一些log行,我发现parser.getName()正在将标记的名称分配给name字符串变量但是我何时可以看到Log.i("MyActivity", name);我的logcat中的名称但我在logcat中看不到Log.i("MyActivity", "new");。所以这意味着if子句失败但为什么? 例如变量name' save the product`但是当它与“product”字相比时它失败了并且没有输入if语句来打印日志。我想知道如果我遗漏了任何内容,或者这里有一些dataType冲突。

1 个答案:

答案 0 :(得分:0)

使用字符串,您应该使用.equals

if(name.equals("product")){

==总是只比较两个引用(对于非基元,即),即它测试两个操作数是否引用同一个对象。

但是,可以覆盖equals方法 - 因此两个不同的对象仍然可以相等......

与剩下的一样

 if(name.equals("productname"))  

 else if (name.equals("productcolor"))

 else if (name.equals("productquantity"))