2012-12-26 13 views
5

Usiłuję zbudować kwerendę XPath w następującym pliku XML:XPath gdzie klauzula

<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> 

chcę pobrać następujące zapytanie: wybierz wszystkie rekordy (artysta, nazwa & roku), gdzie etykieta = „LabelA ".

Struktura XML może nie być odpowiednia do wyświetlenia tych danych, ale otrzymuję ten strumień z innego oprogramowania, więc nie mogę go zmienić.

Wszelkie sugestie?

Odpowiedz

6

To przywróci pełną records które zawierają płytę z etykietą labelA

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

Można też użyć

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

że powróci tylko year i pełny album który pasuje do labelA

+0

wymyśliłem naprawdę bolesnego rozwiązania, które nie będę używać jako rozwiązanie wygląda bardziej wydajny niż moje. Dziękuję Ci bardzo! – Valkyrie

0

Spróbuj:

var = dokument (/ recordGroup/rejestrów [płyta [@ Etykieta = "LabelA"]]);