最好通过一个简短的例子来说明。
主要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文件的情况下生成所需的输出?
谢谢。
答案 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)"/>