述語によって明示的に除外されているにもかかわらず、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