【问题标题】:Android xml parsing missing tagsAndroid xml解析缺少的标签
【发布时间】:2012-03-21 10:30:50
【问题描述】:

我正在尝试使用 dom 解析器解析 xml 文件。 xml 文件包含许多缺失的标签。 我想要做的是,如果我得到任何丢失的标签(例如下面的第二个艺术家标签不包含图像标签),我想将字符串图像设置为像“na”这样的值,以便我可以将值放入数组或列表。

下面是例子

<list>
<artist>
<id>1</id>
<name>name1</name>
<image>name1.jpg</image>
</artist>
<artist>
<id>2</id>
<name>name2</name>
</artist>
</list>

我当前的代码:

        NodeList list = element.getElementsByTagName("artist");
        if (list != null && list.getLength() > 0) {
            for (int i = 0; i < list.getLength(); i++) {

                Node item = list.item(i);

                NodeList properties = item.getChildNodes();

                for (int j = 0; j < properties.getLength(); j++) {

                    Node property = properties.item(j);

                    String name = property.getNodeName();

                    if (name.equalsIgnoreCase("__id")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null ID");
                        }

                    }

                    else if (name.equalsIgnoreCase("__name")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null Name");
                        }

                    }

                    else if (name.equalsIgnoreCase("__image")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null Image");
                        }

                    }
                }`

【问题讨论】:

    标签: android xml parsing dom doc


    【解决方案1】:

    添加一个字符串变量设置为您的默认值,在您进入解析艺术家子标签的循环之前分配。然后在你的循环中,如果你找到一个图像子,用提供的值替换那个字符串变量。

    编辑:基于原文的代码:

            NodeList list = element.getElementsByTagName("artist");
            if (list != null && list.getLength() > 0) {
                for (int i = 0; i < list.getLength(); i++) {
    
                    Node item = list.item(i);
    
                    NodeList properties = item.getChildNodes();
    
                    String strImage = "na"; // default
    
                    for (int j = 0; j < properties.getLength(); j++) {
    
                        Node property = properties.item(j);
    
                        String name = property.getNodeName();
    
                        if (name.equalsIgnoreCase("__id")) {
    
                            try {
    
                                String strTitle = property.getFirstChild()
                                        .getNodeValue();
                                System.out.println(strTitle);
    
                            } catch (NullPointerException e) {
                                // TODO: handle exception
    
                                System.out.println("Null ID");
                            }
    
                        }
    
                        else if (name.equalsIgnoreCase("__name")) {
    
                            try {
    
                                String strTitle = property.getFirstChild()
                                        .getNodeValue();
                                System.out.println(strTitle);
    
                            } catch (NullPointerException e) {
                                // TODO: handle exception
    
                                System.out.println("Null Name");
                            }
    
                        }
    
                        else if (name.equalsIgnoreCase("__image")) {
    
                            try {
    
                                String strTitle = property.getFirstChild()
                                        .getNodeValue();
                                                                strImage = strTitle;
                                System.out.println(strTitle);
    
                            } catch (NullPointerException e) {
                                // TODO: handle exception
    
                                System.out.println("Null Image");
                            }
    
                        }
                    }
                }
                System.out.println("Image: " + strImage);
    

    【讨论】:

    • 答案看起来很有希望.. 但是你能不能给我提供任何工作示例或任何 Shipnet(对不起,我是 android 新手)..
    • 嘿,伙计,我得到了它的帮助。改变不大,而不是设置 String strImage = "na";在循环之外我想它应该在内部声明,因为下一个 null strImage 的值获取先前的值并且没有被初始化为“na”。(如果我得到一个黑色标签,旧值会再次出现)这样做并且它工作正常..: )
    • @ZealDeveloper 是的,你当然是正确设置 strImage 的位置。我已经更新了我的帖子。
    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多