Как разбирать тег с тем же именем в Android XML DOM Parsing

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

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

 First Second  

Мой метод 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> mylist = new ArrayList<HashMap>(); 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 map = new HashMap(); Element e = (Element) nl.item(i); map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM)); mylist.add(map); } } 

Мой class XML-парсера:

 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 здесь. В чем проблема?
Он возвращает только «Item».
Что мне нужно делать в моем 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 map = new HashMap(); Element e = (Element) nl.item(i); map.put(KEY_ITEM, parser.getValue(e, KEY_ITEM)); mylist.add(map); } 

One Solution collect form web for “Как разбирать тег с тем же именем в Android XML DOM Parsing”

Ваш 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; } 
  • Как читать и писать xml-файлы?
  • Почему такая плохая идея анализировать XML с помощью регулярного выражения?
  • Давайте будем гением компьютера.