Quiero leer datos XML utilizando XPath en Java, por lo que para la información que he reunido no puedo analizar XML de acuerdo con mis requisitos.
esto es lo que quiero hacer:
Obtenga un archivo XML en línea a través de su URL, luego use XPath para analizarlo, quiero crear dos métodos en él. Una es en la que ingreso un id. De atributo de nodo específico, y obtengo todos los nodos secundarios como resultado, y la segunda es que solo quiero obtener un valor específico de nodo secundario
<?xml version="1.0"?>
<howto>
<topic name="Java">
<url>http://www.rgagnonjavahowto.htm</url>
<car>taxi</car>
</topic>
<topic name="PowerBuilder">
<url>http://www.rgagnon/pbhowto.htm</url>
<url>http://www.rgagnon/pbhowtonew.htm</url>
</topic>
<topic name="Javascript">
<url>http://www.rgagnon/jshowto.htm</url>
</topic>
<topic name="VBScript">
<url>http://www.rgagnon/vbshowto.htm</url>
</topic>
</howto>
En el ejemplo anterior, quiero leer todos los elementos si busco a través de @name y también una función en la que solo quiero que la url de @name 'Javascript' solo devuelva un elemento de nodo.
Respuestas:
Necesitas algo en este sentido:
Luego, llama a
expr.evaluate()
pasar el documento definido en ese código y al tipo de retorno que espera, y convierte el resultado en el tipo de objeto del resultado.Si necesita ayuda con expresiones XPath específicas, probablemente debería hacerla como preguntas separadas (a menos que esa sea su pregunta aquí en primer lugar, entendí que su pregunta es cómo usar la API en Java).
Editar: (Respuesta al comentario): esta expresión XPath le dará el texto del primer elemento URL en PowerBuilder:
Esto te dará el segundo:
Lo obtienes con este código:
Si no sabe cuántas URL hay en un nodo determinado, debería hacer algo como esto:
Y luego repita la NodeList.
fuente
Puedes probar esto.
Documento XML
Guardar como
employees.xml
.Clase de analizador
La clase tiene los siguientes métodos.
Código fuente
fuente
get
métodos. Solo cambia la cadena XPath y la mayor parte del resto del código permanece igual. Quizás, un solo método getValuesForXpath () es suficiente.Ejemplo de inicio:
archivo xml:
Código Java:
fuente
Aquí hay un ejemplo de procesamiento de xpath con vtd-xml ... para el procesamiento de XML de servicio pesado es insuperable. Aquí está un artículo reciente sobre este tema Procesamiento de XML con Java: un punto de referencia de rendimiento
fuente
Si tienes un xml como abajo
y quería extraer el siguiente xml
El siguiente código ayuda a lograr lo mismo
Ahora si solo quieres el xml como abajo
Necesitas cambiar el
String xpathStr = "//Envelope//Header";
aString xpathStr = "//Envelope//Header/*";
fuente
Esto te muestra cómo
DOM
Nodes
conXPath
Nodes
.Llamaremos al código con la siguiente declaración
En nuestro caso, queremos imprimir algunos
creatorNames
de unbook.xml
uso"//book/creators/creator/creatorName"
como xpath para realizar unaprintNode
acción en cada nodo que coincida con elXPath
.Código completo
Huellas dactilares
por
book.xml
fuente
Ampliando la excelente respuesta de @bluish y @Yishai, así es cómo hace que las NodeLists y los atributos de nodo admitan iteradores, es decir, la
for(Node n: nodelist)
interfaz.Úselo como:
y
El código:
fuente
Lea el archivo XML con XPathFactory
SAXParserFactory
yStAX (JSR-173)
.Usando XPath get node y sus datos secundarios.
Documento XML
Fuera puesto para la XPathExpression dada:
Vea este enlace para nuestra propia Implementación de
NamespaceContext
fuente