2012-01-11 12 views
5

Estoy utilizando el objeto XMLConfiguration de la configuración de Apache commons con el motor de expresiones XPATH para consultar un archivo XML. Soy nuevo en xpath y Apache commons y tengo problemas con la sintaxis.Consultar elementos XML vacíos con atributos usando la configuración de Apache commons xpath

el archivo XML se parece a:

<attrs> 
    <attr name="my_name" val="the_val"/> 
    <attr name="my_name2" val="the_val2"/> 
</attrs> 

Lo que quiero hacer es, básicamente, con el lazo de bienes comunes a través de todos los atributos y leyó el nombre y Val en cada línea. La única forma en que podría trabajar para obtener todo es consultar el xml nuevamente con el valor del nombre. Este tipo de sentimiento me parece incorrecto, ¿hay una mejor manera de hacerlo?

List<String> names = config.getList("attrs/attr/@name"); 
for(String name : names) 
{ 
    String val = config.getString("attrs/attr[@name='" +name +"']/@val"); 
    System.out.println("name:" +name +" VAL:" +val); 
} 

También la conversión de arriba a Cadena, no estoy seguro de la forma adecuada de lidiar con eso.

+0

probar este 'attrs/attr/@ nombre | // attr/@ val' – RanRag

+0

Esto obtuvo ambos valores pero en una larga lista de cadenas de modo que salieron todos los nombres, seguidos por todos los valores. Mientras están en orden, probablemente tendrías que hacer algunas operaciones matemáticas como val_pos = size()/2 y luego obtener i + val_pos mientras avanzas. No muy limpio, pero guarda algunas consultas. Hasta ahora, debido a limitaciones de tiempo, solo vamos a seguir consultando nuevamente para mayor claridad, pero aún así recibimos con agrado una buena forma de recorrer un archivo xml con los recursos comunes que están en ese formato. –

Respuesta

4

Una opción es seleccionar los elementos attr y recorrer los objetos como HierarchicalConfiguration:

List<HierarchicalConfiguration> nodes = config.configurationsAt("attrs/attr"); 
for(HierarchicalConfiguration c : nodes) { 
    ConfigurationNode node = c.getRootNode(); 
    System.out.println(
     "name:" + ((ConfigurationNode) 
          node.getAttributes("name").get(0)).getValue() + 
     " VAL:" + ((ConfigurationNode) 
          node.getAttributes("val").get(0)).getValue()); 
} 

Eso no es muy bonita, pero funciona.

+0

Esto sí funciona. Traté de sincronizar ambas funciones y esta salió más rápido (nanosegundos). Original: 295,377,206 Esto: 12,712,510 ¡Gracias! Trabajará con este método. –

0

¿Cómo se puede obtener el valor de la etiqueta que coincide con un atributo dado como en este ejemplo xml que usa la configuración de commons XML?

<attrs> 
    <attr name="my_name"> First Name</attr> 
    <attr name="my_name2"> First Name 2 </attr> 
</attrs> 

¿Quieres conseguir el valor Nombre para un valor de atributo mi_nombre juego

+0

No debe hacer preguntas en la parte de respuestas. No es como foros. usted puede comentar o hacer una nueva pregunta. –

Cuestiones relacionadas