1

我对这个 XSLT 真的很陌生,并且无法从 XSLT 问题中理解如何执行以下操作。

我有 VOCABULARY 值的转换图:

French -> france
Spenish -> Spain

还有更多(我可以将它们放在 xslt 文件本身中,这并不过分)

如何根据此预定义映射转换具有相等条件的属性值?

...
    <Languages>
        <LANGUAGE>French</LANGUAGE>
        <VOCABULARY>French</VOCABULARY>
    </Languages>
...
4

1 回答 1

0

如果您以 XML 格式定义映射

<xsl:variable name="conversionRules">
  <rule from="French" to="France" />
  <rule from="Spanish" to="Spain" />
</xsl:variable>

并定义一个键

<xsl:key name="conversionKey" match="rule" use="@from" />

然后在 XSLT 2.0 中,您可以使用以下方法有效地查找此映射中的项目

key('conversionKey', value, $conversionRules)/@to

例如

<xsl:template match="VOCABULARY">
  <xsl:copy>
    <xsl:value-of select="key('conversionKey', ., $conversionRules)/@to" />
  </xsl:copy>
</xsl:template>

如果您在样式表的不同位置重复执行此操作,则可能值得定义一个函数

<xsl:function name="local:lang-to-country" as="xs:string">
  <xsl:param name="lang" as="xs:string" />
  <xsl:sequence select="key('conversionKey', $lang, $conversionRules)/@to" />
</xsl:function>

(将相关xmlns:xs="http://www.w3.org/2001/XMLSchema"xmlns:local="urn:local"声明添加到xsl:stylesheet),然后您可以简单地进行转换local:lang-to-country(.)

于 2013-11-14T11:52:05.120 回答