2016-10-20 8 views
1

私はXML文書とそこからデータを抽出するために使用できるいくつかのパスを持っています。XPathを使用して文書内の特定の場所から要素を抽出する

例パス:

Bill/Id 
Bill/Line/AccountBasedExpenseLineDetail 

トリッキーな部分は、私は文書の同じ「領域」からの各データポイントを抽出する必要があることです。例えば、私はこのような文書を与えた場合:

 <Bill domain="QBO" sparse="false"> 
      <Line> 
       <AccountBasedExpenseLineDetail> 
        1 
       </AccountBasedExpenseLineDetail> 
      </Line> 
     </Bill> 
     <Bill domain="QBO" sparse="false"> 
      <Id>148</Id> 
     </Bill> 

が、私は実際に上記のパス与えられた何も返さないする必要があるだろう、<AccountBasedExpenseLineDetail><Id>タグは異なる<Bill>タグ内で発見されているため。文書はこのように見えた場合

しかし、:彼らは両方とも同じBillオブジェクトに含まれているしているので

  <Bill domain="QBO" sparse="false"> 
       <Id>148</Id> 
       <Line> 
        <AccountBasedExpenseLineDetail> 
         1 
        </AccountBasedExpenseLineDetail> 
       </Line> 
      </Bill> 

私は、Bill/Line/AccountBasedExpenseLineDetailパスにBill\Idパスの148と1を返します。

深くネストされたオブジェクトの場合と同様に、より複雑なテーブルの要件が満たされているため、これはかなり難しいです。私はこの問題を少し簡単にするかもしれないいくつかのXPath機能がありますか?今のように、私はかなり複雑な再帰的なソリューションを考えることができますが、私が何か明白なものを見逃していると、それに取り掛かりたくありません。 Bill自体がAccountBasedExpenseLineDetail子要素を持っているLine子要素を持っている場合にのみ

答えて

1

このXPathの、

/Bill[Line/AccountBasedExpenseLineDetail]/Id 

Id要素を返します。

と、このXPathの、

/Bill[Id]/Line/AccountBasedExpenseLineDetail 

BillId子要素を持っている場合にのみ、AccountBasedExpenseLineDetail要素を返します。

関連する問題