0

編集:答えを見つけたと思いますが、誰かが修正/改善を行っているかどうかを確認するために、少し開いたままにします。

Talend の etl ツールで xpath を使用しています。私はこのようなxmlを持っています:

<root>  
 <employee>
  <benefits>
    <benefit>
      <benefitname>CDE</benefitname>
      <benefit_start>2/3/2004</benefit_start>
    </benefit>
    <benefit>
     <benefitname>ABC</benefitname>
     <benefit_start>1/1/2001</benefit_start>
    </benefit>
  </benefits>
<dependent> 
  <benefits>
    <benefit>
  <benefitname>ABC</benefitname>
 </benefit>
</dependent>

扶養家族の福利厚生を解析するとき、従業員の福利厚生要素に存在する要素を取得したいと考えています。したがって、上記の例では、扶養家族の開始日として 2001 年 1 月 1 日を取得したいと考えています。2004 年 2 月 3 日ではなく、2001 年 1 月 1 日が必要です。これは、扶養家族の福利厚生名が ABC であり、従業員の福利厚生と同じ福利厚生名と一致するためです。

/root/employee/dependent/benefits/benefit に相対的などの xpath が、依存する福利厚生名と同じ福利厚生名を持つ親従業員の下の福利厚生の benefit_start の値を生成しますか? (リテラル値がどうなるかは前もってわからないことに注意してください。単に「ABC」を探すことはできません。扶養家族のbenefitname要素に含まれる値と一致する必要があります。

私はしようとしています:

../../../benefits/benefit[benefitname=??what??]/benefit_start

xpath の途中で現在のノードの祖先を参照する方法がわかりません ("." を持っている時点で ??what?? が従業員/福利厚生の福利厚生ノードを参照するため)。

編集:私が欲しいのは「current()/benefitname」だと思います??what?? は。saxon で動作するようですが、etl ツールではまだ試していません。

4

1 に答える 1

1

あなたの XML は不正な形式であり、状況をうまく説明していないと思います (あなたが試みている XPath に../../は最初にたくさんの s がありますが、コンテキスト ノードが何であるかを言っていません。特定のノードを繰り返したり、何をしたりします。

現在のコンテキスト ノードが要素であると仮定すると、依存する利点と一致する をemployee選択できます。benefit_start

benefits/benefit[benefitname = ../../dependent/benefits/benefit/benefitname]
                                                                       /benefit_start

現在のコンテキスト ノードがセクション内のbenefit要素であり、現在の要素だけに対応するものを取得する場合は、次のようにします。dependentsbenefit_startbenefit

../../../benefits/benefit[benefitname = current()/benefitname]/benefit_start

これは、あなたがすでに発見していると思います。

于 2013-06-15T05:17:35.533 に答える