1

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

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

現在のノードが最初の子である場合、またはその親が最初の子である場合は、何か特別なことを行います。

問題は "parent::position() = 1" .. .net の XmlCompiledTransform で

期待される式の終わり。'('. ...sition() = 1 または親 ::position -->(<-- = 1 が見つかりました。

さて、どうやら2番目の部分のposition()関数が気に入らないようですが..どうすれば親の位置を取得できますか? 一般に、テストで XPath 関数を XPathと組み合わせるにはどうすればよいですか?

4

1 に答える 1

2

良い質問、+1。

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

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

true()ツリー内の任意のノード(整形式のXMLドキュメント)のため、常に親ノードが存在する場合(このノードはツリーの最上位ノードであり、親がないためfalse()、コンテキストノードがドキュメントノードである場合のみ)です。/定義上、最大で1つの親ノードを持つことができます。

ほとんどの場合、親要素がその兄弟の中でドキュメントの順序で最初であることをテストする必要があります。これをテストする1つの方法は次のとおりです。

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

したがって、完全なコードは次のようになります。

<xsl:if test="position() = 1 or not(parent::node()/preceding-sibling::*)">        
   <!-- do something -->        
</xsl:if>        
于 2011-12-01T13:16:23.643 に答える