Android wie kann ich in einer xml nach bestimme item suchen (DOM)

BergJava

Aktives Mitglied
Hallo, ich habe folgen Struktur

Code:
<menu>
        <name>Ft</name>
             <item>
             <name>L</name>
             <next>L</next>
             </item>
     </menu>
<menu>
        <name>Ftg</name>
            <item>
            <name>Lg</name>
            <next>Lg</next>
            </item>
    </menu>

Ich will jetzt zum Bespiel nach <name>Ftg</Name> suchen, wie kommen ich dann an den Index um das ganze Menü zu kommen um mit
Java:
 NodeList shows = doc.getElementsByTagName("menu").item("hier der gefunden index").getChildNodes();
die Childs zu bekommen.

Danke
 
Das funktioniert mit XPath zum Beispiel (Entweder du hast einen oder mehrere Nodes, dann müsstest du auf XPathConstants.NODESET zurückgreifen - der gibt dir eine NodeList zurück):
Java:
import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class Test {
  public static void main(String... args) {
    //@formatter:off
    String xml = "<menus>\r\n" + 
        "  <menu>\r\n" + 
        "    <name>Ft</name>\r\n" + 
        "    <item>\r\n" + 
        "      <name>L</name>\r\n" + 
        "      <next>L</next>\r\n" + 
        "    </item>\r\n" + 
        "  </menu>\r\n" + 
        "  <menu>\r\n" + 
        "    <name>Ftg</name>\r\n" + 
        "    <item>\r\n" + 
        "      <name>Lg</name>\r\n" + 
        "      <next>Lg</next>\r\n" + 
        "    </item>\r\n" + 
        "  </menu>\r\n" + 
        "</menus>";
    //@formatter:on
    
    try {
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder db = dbf.newDocumentBuilder();
      Document document = db.parse(new InputSource(new StringReader(xml)));
      XPathFactory xpf = XPathFactory.newInstance();
      XPath xp = xpf.newXPath();
      XPathExpression expression = xp.compile("//menu[name='Ft']");
      Node node = (Node) expression.evaluate(document, XPathConstants.NODE);
      System.out.println(node);
      
    } catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException e) {
      e.printStackTrace();
    }
    
  }
  
}
 
Hallo und Danke hat geklappt.

Jezzt habe ich in meine Liste [,,L,k], in meiner ListView habe ich da natürlich leere Felder, wie kann ich die Komma löchen im ListView?
 
Sorry.

Ich zeige ja die Daten aus der XML in einer ListView, durch das Verwenden von XPath oder auch dem direckten such mit
Java:
 doc.getElementsByTagName("menu").item(0).getChildNodes();
Hab ich jetzt Kommas in der Liste die in der ListView angezeigt wird, durch die Kommas habe ich leere Felder in der LV. Wie bekommen ich diese weg?
 
Code:
   NodeList shows = doc.getElementsByTagName("menu").item(0).getChildNodes();


            for (int i = 0; i <  shows .getLength(); i++) {
                    // creating new HashMap
                Node n = shows.item(i);

                if (n.getNodeType() == Node.ELEMENT_NODE) { Element nm=(Element)n;
           

                    sk = new SitesList();



                 
                    sk.setName(parser.getValue(nm, "name"));
                                
             

                 
                    k.add(sk);
                    Log.i("XMLmen","NOTE : "+ k);
                                 }

              }

 mAdapter = new ArrayAdapter<SitesList>(getActivity(),
  R.layout.list_item, R.id.name, k);

  mListView.setAdapter(mAdapter);
 
Da musst du eben beim parsen prüfen ob "name" leer ist oder nicht und dann hinzufügen oder eben nicht.
 

Zurück
Oben