2012-01-25 23 views
3

XPATHの「親」軸を呼び出すXSLTのパフォーマンスに関する質問があります。 私ならば、それは賢明なパフォーマンスを問題ではない、私は「:: *」を使用して、親軸を呼び出すことができますか、私はそれを使用して呼び出す「::」と要素XSLT 1.0:親軸の移動方法

parent::*/MVKE/item/VMSTA='Z2' 

または

parent::item/MVKE/item/VMSTA='Z2' 

の名前"*"を使用するか、ノード要素の名前を使用するかどうかを確認します。どちらも動作しますが、私はその違いが何であるか不思議でした。 誰かが私にそれを説明できますか?

は ピーター

答えて

3

を使用することです。 2番目の式は、親がitem要素の場合にのみ一致します。それが唯一の違いです。どちらのノード・テストも一定の時間内に実行できるため、パフォーマンスに大きな影響はないとは思いません。 XPath 1.0 specから

注この行:

は、ルートノード以外の各ノードは 要素ノード又はルートノードのいずれかであり、正確に一つの親を有しています。実際に

これは、ルート要素のことを除いてparent::*試合任意の親ということを意味します。その後

<root> 
    <one/> 
    <item> 
     <two/> 
    </item> 
</root> 

  • //parent::*あなたrootitem要素(要素であり、すべての親ノード)

  • を取得します。この簡単な例文書を検討し、実証するために

  • //parent::itemは、item要素(th e親要素(item

  • //parent::node()の親要素のみがrootの親を取得します。ルートノード)だけでなく、rootitem要素は何単に程度

1

は、それは同じではないのですが、私は大きなパフォーマンスの違いがあることを疑う、あなたの助けとよろしくいただき、誠にありがとうございます。

*は親要素を受け入れます。名前を使用する場合は、親がこの名前を持つ必要があります。空のノードセットが必要です。したがって、1つが速ければ、おそらく*になります。

別のオプションは、最初の式が任意の要素の親に一致するparent::node()、またはその短縮形..

1

<xsl:value-of select="../node()"/> 

はあなたの直接の親を与えます。ある方法では、元の質問パフォーマンスの利点は別のものと同じように存在しますか?

+0

質問や回答はありますか? –

関連する問題