2013-09-11 3 views
1

Я следующий XML и использование чайника ложку Получить XML-данных для извлечения:Extract родительскому значение атрибута с помощью XPath в Kettle/Ложка

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

Если я устанавливаю Loop 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 "Подчиненные" (так Подчиненные является фактическим контекстом), вы должны использовать эти XPaths:

Mname: parent::Manager/@mname

$ name: @sname

PhoneNo: PhoneNo

+0

Спасибо за предложение. Он работает, заменив Mname на ** parent :: * [name() = 'Manager']/@ * [name() = 'mname'] ** – Snakeking

+0

Действительно, вам нужен только один ../: ../Manager/@ * [name() = 'mname'] должно работать. – laurent