2012-03-21 83 views
0

我想解析XML文件使用DOM解析器。 xml文件包含大量缺失標籤。 我想要做的是,如果我得到任何缺失的標籤(如下面的例子第二藝術家標籤不包含圖像標籤)我想設置字符串圖像像一些像「na」的值,這樣我可以把值一個數組或一個列表。Android XML解析缺失標記

下面是例子

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

        } 
       }` 

回答

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); 
+0

答案看起來很有希望。但可以ü請給我提供任何工作示例或任何shipnet(抱歉我新至Android).. – ZealDeveloper 2012-03-21 10:41:55

+0

日Thnx了很多,生病試試這個代碼,讓你知道它的工作.. – ZealDeveloper 2012-03-21 11:22:00

+0

嘿麻將,我知道它的工作thanx很多隊友。 改變tho而不是設置String strImage =「na」;在循環之外,我猜它應該在裏面聲明,因爲下一個null strImage的值會獲得前一個值,並且不會被初始化爲「na」(如果我得到一個黑色標記,則會重新發生舊值) 這是否正常工作? :) – ZealDeveloper 2012-03-21 11:37:59