XML解析获取元素null值

问题描述:

我已创建一个Web服务看起来像:XML解析获取元素null值

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
- <todoLists> 
- <todoList> 
    <productId>smthig</productId> 
    <siteCode>smthing</siteCode> 
    <subDeptId>smthing</subDeptId> 
    </todoList> 
    </todoLists> 

,我试图用使用下面的代码是DOM解析器解析,我得到nodeList.getLength()= 20,但没有得到元素的值。它显示为null我也尝试了SAX解析器,但是也给出了null。 web服务有什么问题吗?请建议。

public class XMLParsingDOMExample extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     /** Create a new layout to display the view */ 
     LinearLayout layout = new LinearLayout(this); 
     layout.setOrientation(1); 

     /** Create a new textview array to display the results */ 


     TextView category[]; 

     try { 

      URL url = new URL(
      "http://xxxxxx:8080/webservicedemo/rest/todo"); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(new InputSource(url.openStream())); 
      doc.getDocumentElement().normalize(); 

      NodeList nodeList = doc.getElementsByTagName("todoList"); 
      System.out.println("null 1"); 
      /** Assign textview array lenght by arraylist size */ 


      category = new TextView[nodeList.getLength()]; 
      System.out.println("null 122 nodeList.getLength()" +nodeList.getLength()); 
      for (int i = 0; i < nodeList.getLength(); i++) { 

       Node node = nodeList.item(i); 
       category[i] = new TextView(this); 
       Element fstElmnt = (Element) node; 
       category[i].setText("Name = " 
         + fstElmnt.getAttribute("siteCode")); 


       layout.addView(category[i]); 
       System.out.println("null 551"); 

      } 
     } catch (Exception e) { 
      System.out.println("XML Pasing Excpetion = " + e); 
     } 

     /** Set the layout view to display */ 
     setContentView(layout); 

    } 


    public class RSSAdapter extends BaseAdapter { 
     Element rootElement; 

     public RSSAdapter(Element rootElement) { 
      this.rootElement = rootElement; 
     } 

     public int getCount() { 
      // get the count of children of the root element 
      return 0; 
     } 

     public Object getItem(int position) { 
      // get the child identified by the position, 
      // this is the important part where you  
      // want to get the right child representing the RSS data that you want to get 
      return null; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      // implement your view here.... 
      return null; 
     } 
    } 

} 

你的情况

siteCode没有属性的Node of todoList

解决方案

NodeList nlList = eElement.getElementsByTagName("siteCode").item(0).getChildNodes(); 
    Node nValue = (Node) nlList.item(0); 
    category[i].setText(nValue.getNodeValue()); 
+0

感谢您的快速响应。 –

更改您的循环这个

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

       NodeList nodes = nodeList.item(i).getChildNodes(); 
       category[i] = new TextView(this); 
       Element fstElmnt = (Element) node; 
       // this will return node value of 2nd node 
       category[i].setText("Name = " 
         + fstElmnt.item(1).getNodeValue()); 


       layout.addView(category[i]); 
       System.out.println("null 551"); 

      } 

迭代的节点列表,并获得价值的每个孩子。

NodeList nodeList = doc.getElementsByTagName("todoList"); 
    int length=nodeList.getLength(); 
    category = new TextView[length]; 

    for(int index=0;index<length;index++){ 
     Element element=(Element) nodeList.item(1ndex); 
     NodeList childList=element.getElementsByTagName("siteCode"); 
     Element e=(Element) childList.item(0); 
     Node n=e.getFirstChild(); 
     CharacterData data=(CharacterData)n; 
     category[index].setText(data.getData()); 
    }//end for loop