(ここのすべてのコードは元のバージョンから単純化されています)
私の会社には、XSLT (1.0) で使用される関数があり、ファイル システムからファイルのコンテンツを返します。を使用して関数の戻り値を解析できる必要がありますapply-templates
。次の例を検討してください。
メイン XML ファイル:
<exhibit>
<exhibitTitle>Exhibit</exhibitTitle>
<linkedAsset href="path/to/file.xml" />
</exhibit>
外部 XML ファイル:
<externalAsset editable="true" id="U10250926378W6C">
<img src="path/to/image.png" />
<caption>Some default image</caption>
<externalAsset>
次の XSLT をメインの XML ファイルに適用してみました。
XSLT:
<xsl:template match="linkedAsset">
<xsl:apply-templates select="cus:getFileByUri(./@href)" />
</xsl:template>
<xsl:template match="img">
<xsl:text>|-- Begin Image Source --|</xsl:text>
<xsl:value-of select="./src" />
</xsl:text>|-- End Image Source --|</xsl:text>
</xsl:template>
結果は単に「デフォルトのイメージ」でした。
すべてのノード (または何か) の値だけでなく、XML 構造を取得していることを確認するために、次のことを試しました。
<xsl:template match="linkedAsset">
<xsl:copy-of select="cus:getFileByUri(./@href)" />
</xsl:template>
元の外部 XML ファイル構造を返したもの:
<externalAsset editable="true" id="U10250926378W6C">
<img src="path/to/image.png" />
<caption>Some default image</caption>
<externalAsset>
私も試しました:
<xsl:template match="linkedAsset">
<xsl:value-of select="cus:getFileByUri(./@href)//img/@src" />
</xsl:template>
期待どおり「path/to/image.png」を返しました。
最後に、この質問の回答に基づいて、次の XSLT を試しました。
<xsl:template match="linkedAsset">
<xsl:call-template name="renderExternal">
<xsl:with-param name="asset" select="cus:getFileByUri(./@href)" />
</xsl:call-template>
</xsl:template>
<xsl:template name="renderExternal">
<xsl:param name="asset" select="." />
<xsl:apply-templates select="$asset" />
</xsl:template>
出力はオリジナルと同じでしたapply-template
。
apply-templates
関数から返された値に適用する方法はありますか? copy-of
文字列を、に明確に送信し、value-of
さらに xpath を実行することもできます。私は単にそれを使用しないことはできapply-templates
ますか?
選択した回答の説明
結局のところ、私の問題の解決策は非常に具体的でした (同じテンプレートに一致するノードにテンプレートを適用していましたが、提供したコードの単純化されたバージョンからは明らかではありません)。私は本当にこれで-1を獲得しました。 とにかく、 keshlamの答えは、私の問題だと思っていたことに答えるので、将来この質問にアクセスする人々にとって最も役立つと思います。