0

現在、XSL 2.0 を使用して XML オブジェクトを HTML に転送しています。私の XML のフィールドの 1 つは、国の ID です。国コードの ID ラベル マッピングは、次のような別の XML (countries.xml) で定義されます。

<countries>
  <country id="1" name="United States of America"/>
  <country id="2" name="Canada"/>
</countries>

主要な XSL 変換で、countries.xml を読み込んで ID の国のラベルを取得することはできますか?

4

2 に答える 2

0

<xsl:apply-templates select="" mode=""> を使用して解決策を見つけました

以下のような個別のcountries.xslファイルを作成し、 <xsl:call-template name="countrySubstitution"> を使用してこれを呼び出しました。

私のメインの XSL では:

<xsl:template match="country">
    <xsl:call-template name="countrySubstitution">
        <xsl:with-param name="contextName" select="@name"/>
    </xsl:call-template>
</xsl:template>

国.xsl:

<xsl:stylesheet version="2.0">

    <xsl:template name="countrySubstitution">
        <xsl:param name="countryCode" select="."/>

        <xsl:apply-templates select="document('countries.xml')" mode="ABCD">
            <xsl:with-param name="countryCode" select="@id"/>
        </xsl:apply-templates>

    </xsl:template>

    <xsl:template match="/" mode="ABCD">
        <xsl:param name="countryCode" select="."/>
        <xsl:value-of select="//country[@id=$countryCode]/@name" />
    </xsl:template>

</xsl:stylesheet>
于 2013-09-20T15:36:07.370 に答える
0

はい、doc()またはdocument()関数を使用して XML ファイルを開き、ノードのツリーを作成します。関数は作成されたツリーのルート ノードを返し、そこから情報を取得します。

完全を期すために、コードは次のようになります。変数で見つかった値を検索すると仮定すると、$findCode必要な宣言は 1 つだけで、XSLT 2.0 では 1 行で済みます。

<xsl:key name="countries" match="country" use="@id"/>

...other code...

    <xsl:value-of select="key('countries',$findCode,document('countryCodes.xml'))/@name"/>
于 2013-09-20T00:07:52.063 に答える