2013-04-04 94 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