2013-02-14 44 views
4

Similar issue未能在安卓3.0及以上

有幾個預定義的xml我一直res>raw>first.xml下,我現在在運行時提取並象下面displying數據來從資源的XML數據:

NodeList nodes = MainActivity.commonmethod.GetDocumentFile(ProductActivity.this,_intRowID).getElementsByTagName("string"); 


for (int i = 0; i < nodes.getLength(); i++) {       

      Element e = (Element)nodes.item(i); 
      e.normalize(); 

        _ArrProductName.add(MainActivity.commonmethod.getValue(e, "string"));    
      } 

方法爲了獲取XML文件(plist文件)使用文檔

public Document GetDocumentFile(Context context, int rawID) { 
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
    builderFactory.setNamespaceAware(true); 
    DocumentBuilder builder = null; 
    try { 
     builder = builderFactory.newDocumentBuilder(); 

     document = builder.parse(context.getResources().openRawResource(
       rawID)); 
     document.getDocumentElement().normalize(); 
    } catch (Exception e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    return document; 
} 

GetValue方法

public String getValue(Element item, String str) { 
     NodeList n = item.getElementsByTagName(str); 

     try { 
      StringWriter sw = new StringWriter(); 
      Transformer serializer = TransformerFactory.newInstance().newTransformer(); 
      serializer.transform(new DOMSource(n.item(0)), new StreamResult(sw)); 
      String result = sw.toString(); 

      System.out.println("result="+result); 

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

     return CommonMethod.getElementValue(n.item(0)); 
    } 

    public final static String getElementValue(Node elem) { 
     Node kid; 
     if (elem != null) { 
      if (elem.hasChildNodes()) { 
       for (kid = elem.getFirstChild(); kid != null; kid = kid 
         .getNextSibling()) { 
        if (kid.getNodeType() == Node.TEXT_NODE) { 
         return kid.getNodeValue(); 
        } 
       } 
      } 
     } 
     return ""; 
    } 

的test.xml

<?xml version="1.0" encoding="UTF-8"?> 

    <array> 
     <!-- PrdocuName --> 
     <string>Android ICS 4.0™</string> 

    <!-- PrdocutDescription --> 
     <string>Mobile</string> 

     <!-- PrdocuImage --> 
     <string>Mobile.png</string> 

     <!-- PrdocuAddress --> 
     <string>url</string> 

     <!-- Conversion --> 
     <integer>400</integer> 

     <!-- ThicknessNames --> 
     <string>skim</string> 

     <!-- ThicknessValues --> 
     <string>1</string> 

     <!-- LongDescription --> 
     <string>Android is the market leader in terms of total number of device sold and soon it will be leader in terms of total number of application available in the market.</string> 

    </array> 

上面整個代碼工作遠低於4.0但不高於4.0,getElementsByTagName`回到4.0以上空的結果。

在4.0以下

<?xml version="1.0" encoding="UTF-8"?><string>Android ICS 4.0™</string> 

在4.0以上

<?xml version="1.0" encoding="UTF-8"?> 

String tag結果結果,而高於4.0的測試中丟失,

回答

0

最後我實現了,由內getvalue功能的變化;

更改代碼:

public String getValue(Element item, String str) { 


     String strResponse=""; 
     Node kid; 
     if(item!=null) 
     { 
      if(item.hasChildNodes()) 
      { 
       for(kid=item.getFirstChild(); kid!=null; kid =kid.getNextSibling()) 
       { 
        if (kid.getNodeType() == Node.TEXT_NODE) { 
         strResponse =kid.getNodeValue(); 
         return strResponse; 
        } 
       } 
      }else 
      { 
       NodeList n = item.getElementsByTagName(str); 
       n = item.getChildNodes(); 

       if(((Node) n.item(0))!=null) 
       { 
        if(((Node) n.item(0)).getNodeValue() !=null) 
        { 
         strResponse =((Node) n.item(0)).getNodeValue(); 
         return strResponse; 
        }else 
        { 
         strResponse =""; 
        } 
       } 


      } 
     } 


     return strResponse; 

    } 

它完美的作品!