web-dev-qa-db-ja.com

XSL xsl:template match = "/"

私はXMLとXSLファイルの使用方法を学んでいます。 XSLファイルで、次の用語を見つけました。

xsl:template match="/"

これは何の略ですか? /の代わりに何を使用できますか? /の代わりにtableまたはその他のHTMLタグを記述できますか?

53
Pat

_<xsl:template>_命令のmatch属性の値は、match patternでなければなりません。

一致パターンは、可能なすべてのXPath式のセットのサブセットを形成します。最初の自然な制限は、一致パターンがノードのセットを選択する必要があることです。他にも制限があります。特に、位置ステップでは逆軸を使用できません(ただし、述語内で指定できます)。また、XSLT 1.0では変数またはパラメーターの参照は許可されていませんが、XSLT 2.xではこれらを使用することができます。

XPathの_/_は、rootまたはドキュメントノードを示します。 XPath 2.0(したがってXSLT 2.x)では、これはdocument-node()と書くこともできます。

一致パターンには _//_略語 を含めることができます。

一致パターンの例:

_<xsl:template match="table">
_

tableという名前の要素に適用できます。

_<xsl:template match="x/y">
_

親がyという名前の要素であるxという名前の任意の要素に適用できます。

_<xsl:template match="*">
_

任意の要素に適用できます。

_<xsl:template match="/*">
_

xMLドキュメントの最上位要素にのみ適用できます。

_<xsl:template match="@*">
_

任意の属性に適用できます。

_<xsl:template match="text()">
_

任意のテキストノードに適用できます。

_<xsl:template match="comment()">
_

任意のコメントノードに適用できます。

_<xsl:template match="processing-instruction()">
_

任意の処理命令ノードに適用できます。

_<xsl:template match="node()">
_

任意のノードに適用できます:要素、テキスト、コメント、または処理インストラクション。

120

XMLを初めて使用する人にとって混乱を招くので、XMLドキュメントのルート(またはドキュメントノード)は最上位要素ではないことに注意してください。これは、最上位要素の親です。これは、トップレベル要素が親を持つことができないように思われるため、混乱を招きます。最上位ではないですか?

しかし、これを見てください、整形式のXMLドキュメント:

<?xml-stylesheet href="my_transform.xsl" type="text/xsl"?>
<!-- Comments and processing instructions are XML nodes too, remember. -->
<TopLevelElement/>

このドキュメントのルートには、処理命令、コメント、および要素の3つの子があります。

そのため、たとえば、そのコメントを削除する変換を記述したいが、ドキュメント内の他の場所に表示されるコメントを残したい場合は、これをアイデンティティ変換に追加します。

<xsl:template match="/comment()"/>

さらにシンプル(そしてより一般的に便利)で、名前に関係なくドキュメントのトップレベル要素に一致するXPathパターンを以下に示します:/*

40
Robert Rossney

Match属性は、テンプレート変換が適用されるパーツを示します。その特定のケースでは、「/」はxmlドキュメントのルートを意味します。 match属性に指定する必要がある値は、XPath式である必要があります。 XPathは、ターゲットxmlファイルの特定の部分を参照するために使用する必要がある言語です。

Match属性に他に何を入れることができるかについての有意義な理解を得るためには、xpathが何であり、それをどのように使用するかを理解する必要があります。答えの一番下であなたに提供したリンクを見ることをお勧めします。

「/」の代わりに「table」またはその他のhtmlタグを記述できますか?

はい、できます。しかし、これはあなたが何をしようとしているかによって異なります。ターゲットxmlファイルにHMTL要素が含まれており、このxsl:templateをそれらに適用しようとする場合、table、divまたはanithing elseを使用するのが理にかなっています。

ここにいくつかのリンク:

8
Koynov