XSLT根据硬编码映射重命名属性值

时间:2013-11-14 11:38:45

标签: attributes rename xslt-2.0

我在这个XSLT上真的很新,并且无法从XSLT中了解如何执行以下操作。

我有VOCABULARY值的转换图:

French -> france
Spenish -> Spain

并且还有更多(我可以将它们放在xslt文件中本身并不太多)

如何根据此预定义的地图转换具有相同条件的属性值?

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

1 个答案:

答案 0 :(得分: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(.)

即可进行转换