1. ホーム
  2. xml

[解決済み] xslt での配列の作成

2022-02-12 15:57:54

質問

xsltで配列を作成し、使用することができますか?もしそうなら、勉強するのに適した例がネット上にあるのでしょうか?そうでなければ、配列と同じような方法で値を保存する方法はありますか?

どのように解決するのですか?

XSLT 2.0では、どんなデータ型でもモデル化することができます。

例として

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:variable name="array" as="element()*">
        <Item>A</Item>
        <Item>B</Item>
        <Item>C</Item>
    </xsl:variable>
    <xsl:template match="/">
        <xsl:value-of select="$array[2]"/>
    </xsl:template>
</xsl:stylesheet>

どんな入力でも、出力。

B

XSLT 1.0ではTemporaly Result Treeデータ型は存在しません。結果ツリー・フラグメントというデータ型があるが、これはノード・セット演算子を使えない。したがって、唯一の方法は、拡張関数を使うことである。 node-set() をEXSLTから取得しました(MSXSLには、組み込みの node-set() 拡張もあります)。

つまり、拡張機能のないXSLT 1.0では、インライン・データ・モデルか、パラメータか、外部ドキュメントしか持てないのです。例として

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:variable name="inline-array">
        <Item>A</Item>
        <Item>B</Item>
        <Item>C</Item>
    </xsl:variable>
    <xsl:param name="array" select="document('')/*/xsl:variable[@name='inline-array']/*"/>
    <xsl:template match="/">
        <xsl:value-of select="$array[2]"/>
    </xsl:template>
</xsl:stylesheet>

結果、任意の入力で

B

もしご希望であれば、XSLT 1.0 plus extensionsのサンプルを提供します(標準ではありません...)。