質問

私が本当に間違いをしているのか、それともこれが正しく機能していないのかどうかはわかりません:

<xsl:if test="position() = 1 or parent::position() = 1">
   <!-- do something -->
</xsl:if>

現在のノードが最初の子供である場合、または親が最初の子供である場合、特別なことをしてください。

問題は「parent :: position()= 1」です。

式の予想終了、 '('。... sition()= 1またはparent :: position->(< - = 1)が見つかりました。

さて、どうやらそれは2番目の部分でその位置()機能が好きではありませんが、親の位置を取得するにはどうすればよいですか?一般的に、どうすればよいですか 混ぜる XpathはテストでXpathsを使用しますか?

役に立ちましたか?

解決

良い質問、+1。

何を意味するのかを定義する必要があります 位置 親の.

parent::node()[position() = 1] 

いつも true() 親ノードが存在する場合(is false() コンテキストノードがドキュメントノードである場合にのみ / このノードはツリー内のトップノードであり、親がいないため)。これは、定義上、ツリー内のノード(よく形成されたXMLドキュメント)が最大で1つの親ノードを持つことができるためです。

おそらく、親要素がその兄弟の間で最初に文書の順序であることをテストする必要があります. 。これをテストする1つの方法は、次のとおりです。

not(parent::node()/preceding-sibling::*)

したがって、完全なコードはなります:

<xsl:if test="position() = 1 or not(parent::node()/preceding-sibling::*)">        
   <!-- do something -->        
</xsl:if>        
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top