XSL変換では、かなり長いXPath(約20の異なるノードの結合)があります。このパスは頻繁に必要になるため、その省略形がいいでしょう。
省略形は、現在のコンテキストで評価されるように作成する必要があるため、グローバル変数などを使用しても機能しません。
ターゲットバージョンは、EXSLT拡張機能を備えたXSLT1.0です。
ありがとう、
ジョスト
グローバル変数を使用できない場合は、関数が解決策になる可能性があります。
エンティティを使用して、長いXPathの省略形を指定できます。
XSLTはXMLファイルであるため、XMLエンティティはXSLT内のどこでも使用できます。XSLTが解析されると、エンティティが展開および解決されます。
グローバルXSLT変数では実行できないエンティティーで実行できることは、XPath内でエンティティーを使用し、式を照合することです。
たとえば、長いXPathステートメントのエンティティを作成し、次のように複数の場所で再利用できます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
<!ENTITY lengthyXPath "elem1 | elem2 | elem3 | elem4 | elem5 | elem6 | elem7 | elem8 | elem9 | elem10 | elem11 | elem12 | elem13 | elem14 | elem15 | elem16 | elem17 | elem18 | elem19 | elem20">
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output indent="yes"/>
<xsl:template match="/">
<output>
<xsl:apply-templates select="/*/*"/>
</output>
</xsl:template>
<xsl:template match="foo">
<xsl:comment>mached foo child elements from: &lengthyXPath;</xsl:comment>
<xsl:apply-templates select="&lengthyXPath;"/>
</xsl:template>
<xsl:template match="bar">
<xsl:comment>mached bar child elements from: &lengthyXPath;</xsl:comment>
<xsl:apply-templates select="&lengthyXPath;"/>
</xsl:template>
<xsl:template match="baz">
<xsl:comment>mached baz child elements from: &lengthyXPath;</xsl:comment>
<xsl:apply-templates select="&lengthyXPath;"/>
</xsl:template>
<xsl:template match="&lengthyXPath;">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
このXMLに適用する場合:
<doc>
<foo>
<elem>no match</elem>
<elem1>1</elem1>
<elem>no match</elem>
<elem3>3</elem3>
<elem>no match</elem>
<elem5>5</elem5>
</foo>
<bar>
<elem>no match</elem>
<elem7>7</elem7>
<elem>no match</elem>
<elem9>9</elem9>
<elem>no match</elem>
<elem10>10</elem10>
</bar>
<baz>
<elem>no match</elem>
<elem11>11</elem11>
<elem>no match</elem>
<elem13>13</elem13>
<elem>no match</elem>
<elem15>15</elem15>
</baz>
</doc>
次の出力を生成します。
<?xml version="1.0" encoding="UTF-8"?>
<output><!--mached foo child elements from: elem1 | elem2 | elem3 | elem4 | elem5 | elem6 | elem7 | elem8 | elem9 | elem10 | elem11 | elem12 | elem13 | elem14 | elem15 | elem16 | elem17 | elem18 | elem19 | elem20--><elem1>1</elem1>
<elem3>3</elem3>
<elem5>5</elem5>
<!--mached bar child elements from: elem1 | elem2 | elem3 | elem4 | elem5 | elem6 | elem7 | elem8 | elem9 | elem10 | elem11 | elem12 | elem13 | elem14 | elem15 | elem16 | elem17 | elem18 | elem19 | elem20--><elem7>7</elem7>
<elem9>9</elem9>
<elem10>10</elem10>
<!--mached baz child elements from: elem1 | elem2 | elem3 | elem4 | elem5 | elem6 | elem7 | elem8 | elem9 | elem10 | elem11 | elem12 | elem13 | elem14 | elem15 | elem16 | elem17 | elem18 | elem19 | elem20--><elem11>11</elem11>
<elem13>13</elem13>
<elem15>15</elem15>
</output>