2013-04-04 107 views
5

我需要得到<mathcolor>元素的值的元素<colorvalue>具有價值2.請更正下面給出的XPath表達式:XPath表達式

XPath表達式嘗試:

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

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

回答

3

差不多,請嘗試:

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

或簡單

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

'child ::'是多餘的,不是嗎?我更喜歡你的初步答案 – MattH 2013-04-04 13:21:40

+0

是的,但我想用他的問題中使用的確切示例siva2012。 – TheEwook 2013-04-04 13:22:53

+0

可能需要'/ text()'來獲得*值* – MattH 2013-04-04 13:23:26

0

我喜歡的目標,你首先要以// mathcolor實際元素。剩下的就是說,如果你繼續下去,你會看到一個名爲colorvalue的下面的兄弟節點,其文本節點爲2.

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

考慮給你的答案增加一個解釋。 – 2016-04-27 16:11:21

+0

如果未定義'color'子元素的順序會怎樣?也許'/ mathcolor [../ colorvalue ='2']/text()'會更穩定? – 2016-04-27 16:24:23

+0

我喜歡它,不確定我見過很多孩子節點的順序發生變化的場合。 – 2016-04-27 17:21:39