2013-04-04 15 views
5

ho bisogno per ottenere il valore di <mathcolor> elemento per l'elemento <colorvalue> ha valore 2. Si prega di correggere l'espressione XPath indicato di seguito:espressioni XPath

espressioni XPath cercato:

/colors/child::color/child::mathcolor[colorvalue='2'] 

Esempio XML:

<?xml version="1.0"?> 
<colors> 
    <color> 
     <mathcolor>#007dc5</mathcolor> 
     <textcolor>C=100 M=40 Y=0 K=0</textcolor> 
     <colorvalue>2</colorvalue> 
    </color> 
    <color> 
     <mathcolor>#ed1b34</mathcolor> 
     <textcolor>C=0 M=100 Y=85 K=0</textcolor> 
     <colorvalue>3</colorvalue> 
    </color> 
</colors> 

risposta

3

Quasi, prova che:

/colors/child::color[colorvalue='2']/child::mathcolor/text() 

o semplice

/colors/color[colorvalue='2']/mathcolor/text() 
+0

Il '' figlio :: sono superflue, non è vero? Ho preferito la tua risposta iniziale – MattH

+0

Sì, ci sono ma volevo usare l'esatto esempio siva2012 usato nella sua domanda. – TheEwook

+0

Potrebbe essere necessario un '/ text()' alla fine per ottenere il valore * * – MattH

0

preferisco per indirizzare l'elemento effettivo che si desidera in primo luogo con // mathcolor. Il resto c'è da dire che se si continua verso il basso la struttura si vedrebbe un nodo seguente fratello di nome colorvalue con un nodo di testo = 2.

//mathcolor[./following-sibling::colorvalue[./text()='2']] 
+0

Considera di aggiungere una spiegazione alla tua risposta. –

+0

Cosa succede se l'ordine dei bambini di 'color' non è definito? Forse '// mathcolor [../ colorvalue = '2']/text()' sarebbe più stabile? –

+0

Mi piace, non sono sicuro di aver visto un sacco di occasioni in cui l'ordine dei nodi figlio cambia. –