2013-04-04 20 views
5

ich in Not bin, den Wert <mathcolor> Element für das Element erhalten <colorvalue> Wert 2. Bitte korrigieren Sie den Ausdruck XPath unten angegeben:XPath-Ausdrücke

XPath-Ausdruck versucht:

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

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

Antwort

3

Fast, versuchen Sie das:

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

oder einfacher

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

Das 'Kind ::' sind überflüssig, eine folgende Geschwisterknoten namens Farbwert sehen würde, nicht wahr? Ich bevorzugte deine erste Antwort – MattH

+0

Ja, es gibt, aber ich wollte das genaue Beispiel siva2012 in seiner Frage verwendet verwenden. – TheEwook

+0

könnte am Ende ein '/ text()' Den * Wert zu erhalten * – MattH

0

Ich ziehe das eigentliche Element, das Sie zuerst mit // mathcolor wollen Ziel. Der Rest ist zu sagen, dass, wenn Sie die Struktur weiter unten Sie mit einem Textknoten = 2.

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

Erwägen, eine Erklärung zu Ihrer Antwort hinzufügen. –

+0

Was ist, wenn die Reihenfolge der Kinder von 'color' nicht definiert ist? Vielleicht wäre '// mathcolor [../ colorvalue = '2']/text()' stabiler? –

+0

Ich mag es, nicht sicher, ich habe eine ganze Reihe von Gelegenheiten gesehen, wo sich die Reihenfolge der Kindknoten ändert. –