有些XML文件包含来自不同系统的映射数据。 使用XSLT 1.0将来自XML输入文件的数据替换为来自另一个系统的数据的最佳方法是什么? XML文件示例:
<data>
<currency>
<system1>USD</system1>
<system2>Dollar</system2>
</currency>
<currency>
<system1>EUR</system1>
<system2>Euro</system2>
</currency>
</data>
答案 0 :(得分:5)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY data SYSTEM "mapping.xml">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:template match="node()" mode="mapping">
<xsl:variable name="current" select="node()"/>
<xsl:choose>
<xsl:when test="name(.) = 'currency'">
<xsl:variable name="data">
&data;
</xsl:variable>
<xsl:value-of select="normalize-space(msxsl:node-set($data)/data/currency[system1 = $current]/system2)" />
</xsl:when>
<xsl:otherwise>
<xsl:text>Unknown mapping node: </xsl:text>
<xsl:value-of select="name(.)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
使用:
<xsl:apply-templates select="currency" mode="mapping"/>