1

述語によって明示的に除外されているにもかかわらず、incentor::* を要素に適用して得られる結果を制限しようとすると、常に余分な祖先を取得するという、非常に奇妙な動作が見られます。

ここにコード:

XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <level_a> 
    <level_b> 
      <level_c> 
        <level_d> 
          <level_e/> 
        </level_d> 
      </level_c> 
    </level_b> 
  </level_a>
  <level_b> 
    <level_c> 
      <level_d> 
        <level_d> 
          <level_e/> 
        </level_d> 
      </level_d> 
    </level_c> 
  </level_b>
</root>

XPath:

(//level_d[not(level_d)])[last()]/ancestor::*[level_c|level_b] 

基本的に、別のlevel_d要素がネストされていないlevel_d要素を選択し、それらの最後の要素を取得して、要素level_bまでのすべての祖先を取得しようとしています。しかし、Altova XMLSpy 2011 を使用して見た結果は次のとおりです:

  • level_a
  • level_b

なぜその結果が得られるのか、xpath を改善して祖先をlevel_b (つまり、level_c と level_b)まで効果的に制限する方法がよくわかりません。

どんなヒントでも大歓迎です!
よろしく
Vlax

4

2 に答える 2