2012-01-11 8 views
5

Sto utilizzando l'oggetto XMLConfiguration di configurazione di apache commons con il motore di espressione XPATH per interrogare un file XML. Sono nuovo di xpath e apache commons e sto avendo problemi con la sintassi.Interrogazione di elementi XML vuoti con attributi utilizzando la configurazione di apache commons xpath

Il file XML si presenta come:

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

Quello che voglio fare è fondamentalmente con comuni ciclo tra tutti gli attributi e leggere il nome e la Val a ogni riga. L'unico modo per risolvere tutto è interrogare nuovamente l'xml con il valore del nome. Questo mi sembra sbagliato, c'è un modo migliore per farlo?

Anche la conversione in alto a String, non sono sicuro del modo corretto per gestirlo.

+0

provare questo 'attrs/attr/@ nome | // attr/@ val' – RanRag

+0

Questo ha ottenuto entrambi i valori ma in una lunga lista di stringhe in modo tale che tutti i nomi sono usciti, seguiti da tutti i valori. Mentre sono in ordine, dovresti probabilmente fare alcuni calcoli come val_pos = size()/2 quindi ottenere i + val_pos mentre passi in loop. Non molto pulito ma salva alcune query. Finora, a causa dei limiti di tempo, è bastato ricorrere nuovamente alle query per chiarezza, ma è comunque gradito un buon metodo per eseguire il loop su un file xml con i comuni in quel formato. –

risposta

4

Una possibilità è quella di selezionare gli elementi attr e iterare quelli come HierarchicalConfiguration oggetti:

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()); 
} 

Questo non è molto bello, ma funziona.

+0

Questo funziona davvero. Ho provato a cronometrare entrambe le funzioni e questa è uscita più velocemente (nanosecondi). Originale: 295,377,206 Questo: 12,712,510 Grazie! Funzionerà con questo metodo. –

0

In che modo è possibile ottenere il valore del tag corrispondente a un determinato attributo come in questo esempio xml utilizzando la configurazione XML comune?

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

Vuoi ottenere il valore Nome per un valore di attributo corrispondente my_name

+0

Non si dovrebbe fare una domanda nella parte risposta. Non è come i forum. puoi commentare o fare una nuova domanda. –