0

我目前正在使用 XSL 2.0 将 XML 对象转换为 HTML。我的 XML 中的一个字段是国家/地区的 id。国家代码的 id-label 映射在另一个 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

是的,使用doc()ordocument()函数打开 XML 文件并构建节点树。这些函数返回创建的树的根节点,您可以从那里获取信息。

为了完整起见,您的代码将如下所示,假设您正在查找在变量中找到的值,$findCode您只需要一个声明和 XSLT 2.0 中的一行:

<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 回答
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 回答