2013-09-11 55 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