XSLT 从辅助 xml 文件获取本地化字符串



最好用一个简短的例子来证明。

主 XML:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
  </cd>
  <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
  </cd>
</catelo>

辅助 XML,我们称之为 localisation.es.xml

<?xml version="1.0" encoding="UTF-8"?>
<localisation lang="es">
    <field id="title">Título</field>
    <field id="artist">Artista</field>
</localisation>

所需的输出:

<html>
  <table>
    <thead>
      <tr>   <td>Título</td>            <td>Artista</td>      </tr>
    </thead>
    <tbody>
      <tr>   <td>Empire Burlesque</td>  <td>Bob Dylan</td>    </tr>
      <tr>   <td>Hide your heart</td>   <td>Bonnie Tyler</td> </tr>
    </tbody>
  </table>
</html>

如您所见,数据来自主 XML 文件,而字段名称的本地化字符串来自辅助 XML。如何编写 XSLT 来处理此案?


此外,如果 XSLT 不知道这些字段怎么办?比如说,有人为主 XML 中的每条记录添加了一个新的字段<year>,并在localisation.es.xml中添加了一行:

    <field id="year">Año</field>

是否可以在不修改 XSLT 文件的情况下生成所需的输出?

谢谢。

这可以使用查找表来完成,这需要 XSLT 2.0。

在 xslt 中,您将创建一个键和一个包含查找表的变量(在本例中为本地化文件)。每当您需要查找表中的文件时,都可以使用该键搜索正确的值。

所以首先定义变量和键。

<xsl:variable name="localisation" select="document('localisation.es.xml')"/>
<xsl:key name="locKey" match="localisation/field" use="@id"/>

然后,当您需要查找标题的字符串时,您将按如下方式选择它

<xsl:value-of select="key('locKey', 'title', $lookup)"/>

最新更新