DomParser - Element filtern

Benutzer267

Mitglied
Hey,
und zwar habe ich folgende XML (gekürzte Form):
XML:
<keys>
    <key type="privat">
        <id>01</id>
        <description>TestDescr</description>
    </key>
    <key type="geschäftlich">
        <id>01</id>
        <description>TestDescr</description>
    </key>
</keys>
Meine Frage ist nun, wie ich die Elemente, mit Hilfe des Dom-Parsers, so filtern kann, dass ich nur die id und description des keys mit beispielsweise dem type "privat" ausgeben kann.

Kann mir jemand weiterhelfen?
 
Sollte in etwa so funktionieren:
Java:
XPath path = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList) path.evaluate("/keys/key[@type='privat']", doc, XPathConstants.NODESET);
 
Wo soll ich das Ganze ergänzen?

Hier nochmal die XML und der vollständige bisherige Code:

XML:
<keys>
    <key type="kosten">
        <id>01</id>
        <description>TestDescr</description>
    </key>
    <key type="ort">
        <id>01</id>
        <description>TestDescr</description>
    </key>
</keys>

Java:
public class Key {
    private String id;
    private String description;

    public Key(String pId, String pDescription) {
        setId(pId);
        setDescription(pDescription);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

Java:
public class Parse() {
    private static String pfad = "pfadZurDatei";

    private static ArrayList<Key> kostenListe;
    private static ArrayList<Key> ortListe;

    public static void main(String[] args) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
  
        Document document = builder.parse(new File(pfad));
  
        getKostenListe();
    }

    public static ArrayList<Key> getKostenListe(Document document) {
        NodeList id = document.getElementsByTagName("id");
        NodeList description = document.getElementsByTagName("description");
  
        kostenListe = new ArrayList<Key>(id.getLength);
        for (int i = 0; i < id.getLength(); i++) {
            String ID = id.item(0).getTextContent();
            String DESCRIPTION = description.item(0).getTextContent();
      
            Key key = new Key(ID, DESCRIPTION);
            kostenListe.add(key);

           /*Wenn ich jetzt hier die Id und Description aus der Key Klasse hole bzw. ausgebe,
             erhalte ich logischerweise die Werte der ganzen XML. Wie ist es hier möglich nur die Werte
             des keys mit dem "kosten" typ auszugeben?*/
             System.out.println(key.getId());
             System.out.println(key.getDescription());
        }
        return kostenListe;
    }

    /**
     * Erstmal irrelevant.
     */
    public static ArrayList<Key> getOrtListe(Document document) {
        NodeList id = document.getElementsByTagName("id");
        NodeList description = document.getElementsByTagName("description");
  
        ortListe = new ArrayList<Key>(id.getLength);
        for (int i = 0; i < id.getLength(); i++) {
            String ID = id.item(0).getTextContent();
            String DESCRIPTION = description.item(0).getTextContent();
      
            Key key = new Key(ID, DESCRIPTION);
            ortListe.add(key);
        }
        return ortListe;
    }
}
 
Zuletzt bearbeitet:
Java:
    public static ArrayList<Key> getKostenListe(Document doc) {
        XPath path = XPathFactory.newInstance().newXPath();
        NodeList keys = (NodeList) path.evaluate("/keys/key[@type='privat']", doc, XPathConstants.NODESET);
        kostenListe = new ArrayList<Key>(keys.getLength());
        for (int i = 0; i < keys.getLength(); i++) {
             Element elem = (Element) keys.item(i);
             kostenListe.add(getKey(elem));
        }
    }

    private static Key getKey(Element elem) {
        NodeList id = elem.getElementsByTagName("id");
        NodeList description = elem.getElementsByTagName("description");

        return new Key(id.item(0).getTextContent(), description.item(0).getTextContent());
    }
 

Zurück
Oben