2013-09-11 54 views
1

我有下面的XML和使用水壶勺子获取XML数据提取:提取正确的父属性值

<Company cname="ABC"> 
<Staffs> 
    <Manager mname="John"> 
     <Subordinate sname="Apple"> 
      <PhoneNo>11111111</PhoneNo> 
     </Subordinate> 
     <Subordinate sname="Becky"> 
      <PhoneNo>22222222</PhoneNo> 
     </Subordinate> 
    </Manager> 
    <Manager mname="Peter"> 
     <Subordinate sname="Cathy"> 
      <PhoneNo>33333333</PhoneNo> 
     </Subordinate> 
     <Subordinate sname="Doris"> 
      <PhoneNo>44444444</PhoneNo> 
     </Subordinate> 
    </Manager> 
</Staffs> 
</Company> 

如果我设置环的XPath/公司/职员/经理/下属,我得到了不正确的经理姓名(所有经理都是约翰!)

Mname: ../../*[name()='Manager']/@*[name()='mname'] 
Sname: @*[name()='sname'] 
PhoneNo: *[name()='PhoneNo'] 

|#|Mname|Sname|PhoneNo | 
|-+-----+-----+--------| 
|1|John |Apple|11111111| 
|2|John |Becky|22222222| 
|3|John |Cathy|33333333| 
|4|John |Doris|44444444| 

请帮忙,如何得到正确的经理姓名?

------------------------ 
|#|Mname|Sname|PhoneNo | 
|-+-----+-----+--------| 
|1|John |Apple|11111111| 
|2|John |Becky|22222222| 
|3|Peter|Cathy|33333333| 
|4|Peter|Doris|44444444| 
------------------------ 

回答

1

我不知道水壶或勺子anythinh但IMO如果循环throuh“下属”(所以下属是一个实际的上下文中),你应该使用这些XPath:

MNAME:parent::Manager/@mname

SNAME:@sname

PHONENO:PhoneNo

+0

感谢您的建议。它的工作原理是将**替换为** parent :: * [name()='Manager']/@ * [name()='mname'] ** – Snakeking

+0

确实,您只需要一个../:../Manager/@ * [name()='mname']应该可以工作。 – laurent