2013-04-04 12 views
5

jestem w potrzebie, aby uzyskać wartość <mathcolor> elementu do elementu <colorvalue> ma wartość 2. Popraw wyrażenie XPath podane poniżej:Xpath wyrażenia

Xpath Expression próbowałem:

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

Przykładowy kod 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> 

Odpowiedz

3

Prawie, spróbuj tego:

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

lub prostsze

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

Opcja 'dziecięcą ::' są zbędne, prawda? Preferowałem twoją początkową odpowiedź – MattH

+0

Tak, są, ale chciałem użyć dokładnego przykładu siva2012 użytego w jego pytaniu. – TheEwook

+0

Może potrzebować '/ text()' na końcu, aby uzyskać * wartość * – MattH

0

Wolę kierować rzeczywisty element, który chcesz najpierw // mathcolor. Reszta jest tam, aby powiedzieć, że jeśli w dalszym ciągu w dół struktury będzie można zobaczyć następujące rodzeństwo węzła o nazwie colorvalue z węzłem tekstowym = 2.

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

Zastanów się nad dodaniem wyjaśnienia do swojej odpowiedzi. –

+0

Co się stanie, jeśli kolejność dzieci 'color' nie jest zdefiniowana? Może '// mathcolor [../ colorvalue = '2']/text()' byłby bardziej stabilny? –

+0

Podoba mi się, nie jestem pewien, czy widziałem wiele okazji, w których zmienia się kolejność węzłów podrzędnych. –