Domanda

Attualmente sto usando JDOM per fare un po 'di analisi semplice XML, e sembra che il tipo sicuro di niente - ho avuto un problema simile con utilizzando il built-in Java parser DOM, solo con un sacco di più API per guadare attraverso

Per esempio, XPath.selectNodes prende un Object come argomento e restituisce un elenco grezzo, che ha appena sente un po 'Java 1.1

Ci sono generic-ized XML e librerie per Java XPath, o c'è qualche motivo per cui non è proprio possibile fare query XPath in modo type-safe?

È stato utile?

Soluzione

Se si ha familiarità con i selettori CSS in HTML, può essere utile sapere che Jsoup supporti XML pure.


Aggiorna : OK, che è stato dato il downvote a quanto pare una risposta molto controversa. Può tuttavia finiscono per essere più facile e meno prolisso di XPath quando invece si è per selezionare i valori dei nodi. L'API Jsoup è cioè molto liscia. Diamo un po 'esempio più concreto. Supponendo che si dispone di un file XML, che simile a questa:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="1">
        <name>John Doe</name>
        <age>30</age>
        <address>
            <street>Main street 1</street>
            <city>Los Angeles</city>
        </address>
    </person>
    <person id="2">
        <name>Jane Doe</name>
        <age>40</age>
        <address>
            <street>Park Avenue 1</street>
            <city>New York</city>
        </address>
    </person>
</persons>

Quindi è possibile attraversarlo come segue:

Document document = Jsoup.parse(new File("/persons.xml"), "UTF-8");

Element person2 = document.select("person[id=2]").first();
System.out.println(person2.select("name").text());

Elements streets = document.select("street");
for (Element street : streets) {
    System.out.println(street.text());
}

quali uscite

Jane Doe
Main street 1
Park Avenue 1

Aggiorna 2 :. Dal Jsoup 1.6.2 che è stato rilasciato Marzo 2012, parsing XML è ufficialmente supportato dall'API Jsoup

Altri suggerimenti

Per quanto ne sappia tutte le query XML in Java sono non-typesafe e la maggior parte sono java 1.3 compatibili. Detto questo il mio parser / generatore preferito è il xml tirare parser (xmlpp) parser stile. Credo che Java ha XmlStreamReader e XmlStreamWriter se si sta utilizzando 1.6, che sono quasi la stessa come la biblioteca xmlpp. Mi piace soprattutto che posso scrivere un metodo getFoo che prende un lettore di flusso e tira da esso e restituisce un oggetto Foo. È un po 'il migliore tra i DOM e SAX. Penso che possa essere indicato come StAX da alcuni.
Sto diventando un po 'di passeggiata-y così sto smettere ora

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top