2013-07-02 3 views
0

Я не могу разобрать мой XML здесь. Он возвращает только «Item».
Моя AndroidActivity не может быть показана, так как она очень большая, поэтому я только показал часть, которая отвечает за разбор.Как разобрать тег с тем же именем в Android XML DOM Parsing

Мой XML выглядит следующим образом:

<MyResource> 
<Item>First</Item> 
<Item>Second</Item> 
</MyResource> 

Мой метод ActivityClass:

public class ShowItems extends Activity{ 
    ListView lv; 
    ListAdapter adapter; 
    static final String KEY_RESOURCE = "MyResource"; // parent node 
    static final String KEY_ITEM = "Item"; 
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
    String[] from={KEY_ITEM }; 
    int[] to={R.id.mylist_item}; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.showitems); 

     lv=(ListView) findViewById(R.id.lv_items); 
     parseXML(); 
     adapter = new SimpleAdapter(this, mylist,R.layout.list_item,from , to); 
     lv.setAdapter(adapter); 
    } 

private void parseXML() { 
    // TODO Auto-generated method stub 
    XMLParser parser = new XMLParser(); 

    final String URL="http://10.0.2.2:8080/MySite/xml"; 
    String xml = parser.getXmlFromUrl(URL); 
    Document doc = parser.getDomElement(xml); 
    NodeList nl = doc.getElementsByTagName(KEY_RESOURCE); 
    for (int i = 0; i < nl.getLength(); i++) { 

     HashMap<String, String> map = new HashMap<String, String>(); 
     Element e = (Element) nl.item(i); 
     map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM)); 
     mylist.add(map); } 
} 

Мой XML Parser Класс:

import java.io.IOException; 
import java.io.StringReader; 
import java.io.UnsupportedEncodingException; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
import android.util.Log; 
public class XMLParser { 
    public String getXmlFromUrl(String url) { 
     String xml = null; 
     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 
      HttpResponse httpResponse = httpClient.execute(httpGet); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      xml = EntityUtils.toString(httpEntity); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return xml; 
    } 

    public Document getDomElement(String xml){ 
     Document doc = null; 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     try { 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      InputSource is = new InputSource(); 
       is.setCharacterStream(new StringReader(xml)); 
       doc = db.parse(is); 
      } catch (ParserConfigurationException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } catch (SAXException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } catch (IOException e) { 
       Log.e("Error: ", e.getMessage()); 
       return null; 
      } 
       // return DOM 
      return doc; 
    } 

    public String getValue(Element item, String str) {  
     NodeList n = item.getElementsByTagName(str);   
     return this.getElementValue(n.item(0)); 
    } 
    public final String getElementValue(Node elem) { 
      Node child; 
      if(elem != null){ 
       if (elem.hasChildNodes()){ 
        for(child = elem.getFirstChild(); child != null; child = child.getNextSibling()){ 
         if(child.getNodeType() == Node.TEXT_NODE ){ 
          return child.getNodeValue(); 
         } 
        } 
       } 
      } 
      return ""; 
     } 
} 

Я не могу разобрать мой XML здесь. В чем проблема?
Он возвращает только «Предмет».
Что мне нужно сделать в моей ActivityClass особенно в этой части кода:

String xml = parser.getXmlFromUrl(URL); 
    Document doc = parser.getDomElement(xml); 
    NodeList nl = doc.getElementsByTagName(KEY_RESOURCE); 
    for (int i = 0; i < nl.getLength(); i++) { 


     HashMap<String, String> map = new HashMap<String, String>(); 
     Element e = (Element) nl.item(i); 
     map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM)); 
     mylist.add(map); } 
+0

Я не уверен, что вы хотите здесь, не могли бы вы быть более ясными? – kosa

+0

вы видите его XML. У него есть два тега '', которые ему нужно проанализировать через DOM. И когда он анализирует его по описанному выше методу, только первый тег «» анализируется, другие (или повторяющиеся) игнорируются. – Altair

+0

@AltairRules: 1) Вы получаете «первый» (или) «второй» в качестве входных данных? 2) Не могли бы вы напечатать и посмотреть размер NodeList nl = doc.getElementsByTagName (KEY_RESOURCE) ;? – kosa

ответ

0

Ваш метод getValue() получает MyResource элемент, оттуда, вы должны получить все товары под MyResource и сделать getElementValue(). Пример кода:

public Map getValue(Element item, String str) { 
     NodeList n = item.getElementsByTagName(str); 
     for (int i = 0; i < n.getLength(); i++) { 
      System.out.println(getElementValue(n.item(i))); 
     } 
     //Here store it in list/map and return list/map instead of String 
     return list/MapHere; 
    } 
+0

где я должен положить этот код. Смотрите, что мой цикл for работает. Как я могу назвать этот метод? – Altair

+0

@Altair: у вас есть этот метод в классе XMLParser. – kosa

+0

k ... позвольте мне попробовать !! – Altair

Смежные вопросы