2012-12-26 20 views
5

Sto cercando di costruire una query XPath sul seguente file xml:XPath clausola where

<recordGroup> 
    <records> 
     <year>1985</year> 
     <album> 
      <name> album1 </name> 
      <artist>artist1 </artist> 
      <label> labelA</label> 
     </album>  
     <album> 
      <name>album2 </name> 
      <artist>artist2 </artist> 
      <label> labelB</label> 
     </album>  
    </records>  
    <records> 
     <year>1986</year> 
     <album> 
      <name>album3 </name> 
      <artist> artist1 </artist> 
      <label>labelC</label> 
     </album>  
     <album> 
      <name>album4 </name> 
      <artist>artist2</artist> 
      <label> labelA</label> 
     </album>  
    </records> 

</recordGroup> 

voglio recuperare la seguente query: selezionare tutti i record (artista, nome & anno) dove label = 'LabelA '.

La struttura XML potrebbe non essere appropriata per visualizzare questi dati, ma sto ricevendo questo flusso da un altro software, quindi non posso cambiarlo.

Qualche suggerimento?

risposta

6

Questo riporterà la piena records che contengono un album con un'etichetta di labelA

//records[album/label='labelA'] 

Si potrebbe anche usare

//records[album/label='labelA']/*[self::year or self::album[label='labelA']] 

che restituirà solo il year e la piena album che corrisponde al labelA

+0

mi si avvicinò con una soluzione davvero brutto che io non utilizzare come soluzione sembra più efficace del mio. Grazie mille! – Valkyrie

0

Prova questo:

var = doc ([etichetta album [@ = "LabelA"]]/recordGroup/record);