2011-10-05 7 views
5

初心者の質問です。このXPath式/..の意味は?それは常に空のノード集合を選択しますか?XSLT XPathで '/ ..'表記を使用

私は例えば、このパターンはFXSLライブラリで広く使用されていることに気付きました:

<xsl:template name="map"> 
    <xsl:param name="pFun" select="/.."/> 
    <xsl:param name="pList1" select="/.."/> 

    <xsl:for-each select="$pList1"> 
    <xsl:copy> 
     <xsl:apply-templates select="$pFun"> 
     <xsl:with-param name="arg1" select="."/> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:for-each> 
</xsl:template> 

それはここでのパラメータの価値観で/..を指定する必要ですか?

答えて

5

の目的:

<xsl:param name="pFun" select="/.."/> 

パラメータ$pFunのタイプは、ノード(またはより一般的にはリンパ節転移であること(少なくともそのタイプのシステムは非常に弱いのXPath 1.0単位)を指定することですセット)。したがって、このパラメータに渡される値は文字列または整数であってはならないことを読者は知っています。

また、このパラメータがテンプレートの呼び出しまたは適用時に明示的に指定されていない場合、デフォルト値は空のノードセットです。

この表記は、主に文書の重要性を持っています(ただし、この回答の最後にある更新を参照してください)。は、型システムが弱いXPath 1.0でのみ有効です。 XPath 2.0では、型を明示的に指定することを推奨します。これにより、XPathプロセッサはより良い型チェックを実行できるようになり、生成されたコードはより最適化され効率的になります。このような表記の他のバリエーションがあり

<xsl:param name="pFun" as="element()"> 

したがって、(この特定の場合において)のXPath 2.0/XSLT 2.0には、上記にリファクタリングする方が良いであろう。

@comment() 

更新/..は単にドキュメントの目的にサービスを提供するよりも実用的な用途を持つ式@Michaelケイの早期冊で1も同様の表現を見つけることができます。

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/*"> 
    <xsl:param name="pNode"/> 
    <xsl:copy-of select=".|$pNode"/> 
</xsl:template> 
</xsl:stylesheet> 

任意のXML文書にこの変換を適用するようにしてください。我々の場合には、可能な限り単純な:

:今すぐを交換

Error at xsl:copy-of on line 8 of file:/(Untitled): 
    The value is not a node-set 
Transformation failed: Run-time errors were reported 

<t/> 

結果は、次のサクソンのエラーメッセージ(他のXSLT 1.0プロセッサを搭載した同様のエラー)であります

<xsl:param name="pNode"/> 

<xsl:param name="pNode" select="/.."/> 

と再び変換を実行します。

今回は、実行時エラーなしで変換が実行されます。

結論:空のノードセットを指定する能力は実際には重要であり、式/..はこれを達成する方法の1つです。

0

/はルートノードです(XPath式の先頭にある場合)。/..はルートノードの親になります。

これは意味をなさない。

./..:ie。現在の(コンテキスト)ノードの親。

2

/..は、ルートノードの親を選択します。これは何も選択しないことが保証されています。

/は、実際にはドキュメントのトップレベルの抽象的な概念であり、トップレベルアイテムを参照するための開始点としてXPathで使用されます。子供には常にドキュメント要素が含まれ、ドキュメント要素の兄弟であるトップレベルcomment()processing-instruction()も含まれます。

ここでパラメータの値に/ ..を指定する必要がありますか?

いいえ、xsl:paramにはデフォルトのSELECT文を指定する必要はありません。この場合、これらのパラメータのデフォルトを明示的に「無」と定義するために使用されています。

関連する問題