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

时间:2019-01-14 06:25:28

标签: xml xslt

最好通过一个简短的例子来说明。

主要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文件的情况下生成所需的输出?

谢谢。

1 个答案:

答案 0 :(得分:1)

这可以使用查找表来完成,这需要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)"/>