【发布时间】:2013-12-11 14:47:56
【问题描述】:
我从 XSLT 开始,并试图解决以下问题:
这是我的 XML 代码:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_SOURCE xmlns:ns0="urn:test:xslt:chris">
<FirstName>Chris</FirstName>
<LastName>Rock</LastName>
<Address>
<Street>Musterstr.</Street>
<StreetNumber>2</StreetNumber>
<PostalCode>12345</PostalCode>
<City>Stadt</City>
<Country>Deutschland</Country>
</Address>
</ns0:MT_SOURCE>
现在我想将其转换为另一个结构,在该结构中我将国家值映射到代码。 静态地,我通过以下方式使其工作:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="urn:test:xslt:chris">
<xsl:variable name="map">
<map>
<entry from="Deutschland">DE</entry>
<entry from="England">EN</entry>
<entry from="USA">US</entry>
</map>
</xsl:variable>
<xsl:template match="/">
<a:MT_TARGET>
<NAME>
<xsl:value-of select="concat(concat(a:MT_SOURCE/FirstName,' '),a:MT_SOURCE/LastName)"/>
</NAME>
<COUNTRYCODE>
<xsl:value-of select="document('')//xsl:variable[@name='map']/map/entry[@from='England']"/>
</COUNTRYCODE>
<CITY>
<xsl:value-of select="a:MT_SOURCE/Address/City"/>
</CITY>
<POSTALCODE>
<xsl:value-of select="a:MT_SOURCE/Address/PostalCode"/>
</POSTALCODE>
<STREET>
<xsl:value-of select="concat(a:MT_SOURCE/Address/Street,a:MT_SOURCE/Address/StreetNumber)"/>
</STREET>
</a:MT_TARGET>
</xsl:template>
</xsl:stylesheet>
现在重要的部分是以下行:
<COUNTRYCODE>
<xsl:value-of select="document('')//xsl:variable[@name='map']/map/entry[@from='England']"/>
</COUNTRYCODE>
静态上这是有效的,所以我在国家代码输出中得到的是 EN 而不是 England。但我宁愿需要的是对 Country 字段进行评估,并且从映射表中获取属于它的正确值。
您能否告诉我如何修改我的代码以使其正常工作? 我尝试使用 current() 但它似乎没有做任何事情。
【问题讨论】: