私は XSLT をごく短期間しか使用していませんが、概念的な質問があります。
XML ファイルがあります。
<?xml version="1.0"?>
<root>AAA - BBB</root>
および XSLT ファイル
<xsl:output method="text"/>
<xsl:param name="DATA" select="999"/>
<lookup:strings>
<string id='eee'>XXX</string>
<string id='fff'>YYY</string>
</lookup:strings>
<xsl:key name='look' match='lookup:strings/string' use='@id' />
<xsl:variable name='strings' select='document("")//lookup:strings' />
<xsl:template match="/">
<xsl:text>$strings=</xsl:text>
<xsl:value-of select="$strings"/>
<xsl:text>
</xsl:text>
<xsl:text>(A)</xsl:text>
<xsl:for-each select='$strings'>
<xsl:value-of select='key("look", "eee")'/>
</xsl:for-each>
<xsl:text>(B)</xsl:text>
<xsl:value-of select='key("look", "eee")'/>
<xsl:text>(C)</xsl:text>
<xsl:value-of select="substring-before(.,' - ')"/>
<xsl:text>(D)</xsl:text>
<xsl:value-of select="$DATA"/>
</xsl:template>
これにより、次の出力が生成されます。
$strings= XXX YYY
(A)XXX(B)(C)AAA(D)999
質問:
出力を生成するために、キー検索で (A) の for-each が必要なのはなぜですか? (C) では、select は関数を文字列に評価し、(D) では、select はパラメーターを文字列に評価します。(B) の関数が XXX に評価されないのはなぜですか?
ここで重要な概念が欠けていることはわかっていますが、さまざまな XSLT ドキュメントを数時間調べても答えが返されませんでした。
どうもありがとう。