我用XSLT开始,我试图解决以下问题:XSLT 1.0映射检查当前节点
这是我的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>
静态这是工作,所以我在COUNTRYCODE输出越来越EN而不是英格兰。但是我想要的是国家字段被评估,并且从映射表中正确的价值取决于它属于它。
你能否给我如何修改我的代码,以使其工作? 我尝试使用current(),但它似乎没有做任何事情。
非常感谢你,这适用于我的例子。我尝试从=当前()和从= a:MT_SOURCE /地址/国家,但都没有工作。你能解释为什么它不足以从= a:MT_SOURCE /地址/国家说出吗?另外我怎么能加强这一点的情况下,我的
元素将是1:n而不是1:1? – user3091422document()函数允许您查询另一个XML文档。要切换回当前上下文,将使用current()。在这两种情况下,不仅需要更改文档,还需要解决查询问题。如果找不到匹配的数据,则返回一个空节点集合,但不会出现错误消息。在你的情况下,可能会令人困惑的是,实际文档与使用空文档('')相同。 – Andreas