¿Cómo puedo hacer consultas XPath con seguridad de tipos en Java?
-
27-09-2019 - |
Pregunta
Actualmente estoy usando JDOM para hacer un poco de análisis sintáctico XML simple, y parece que un tipo seguro de nada - que tenía un problema similar con el uso de la más API incorporado en Java DOM analizador, simplemente con una gran cantidad de vadear a través
Por ejemplo, XPath.selectNodes
toma un Object
como su argumento y devuelve una lista prima, que sólo se siente un poco de Java 1.1
¿Hay-zado genérico XML y bibliotecas XPath para Java, o hay alguna razón por la que simplemente no es posible hacer consultas XPath en una forma de tipo seguro?
Solución
Si está familiarizado con los selectores CSS en HTML, puede ser bueno saber que Jsoup soportes XML también.
Actualizar : OK, que se le dio el downvote parecer una respuesta muy controvertido. Sin embargo, puede terminar siendo más fácil y menos detallado que el XPath cuando lo que quieres es seleccionar valores de nodo. El API Jsoup es decir, muy resbaladiza. Vamos a darle un poco ejemplo más concreto. Asumiendo que usted tiene un archivo XML que se parecen a esto:
<?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>
A continuación, puede atravesarlo como sigue:
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());
}
que salidas
Jane Doe Main street 1 Park Avenue 1
Actualización 2 . Jsoup desde que fue lanzado 1.6.2 Marzo de 2012, el análisis de XML está soportado oficialmente por la API Jsoup
Otros consejos
Que yo sepa todas las consultas XML en Java son no typesafe y la mayoría son compatibles Java 1.3. Dicho esto mi analizador / generador favorito es el href="http://xmlpull.org/" rel="nofollow"> analizador XML tirón analizador estilo. Creo que Java tiene XmlStreamReader y XmlStreamWriter si está utilizando 1.6 que son casi lo mismo que la biblioteca xmlpp. En especial me gusta que puedo escribir un getFoo método que toma un lector corriente y tirones de ella y devuelve un objeto de Foo. Es una especie de la mejor entre DOM y SAX. Creo que puede ser referido como StAX por algunos.
Me estoy poniendo un poco de paseo-y así que voy a dejar ahora