这是我的源XML文件:
<?xml version="1.0" encoding="utf-8"?>
<root>
<employees>
<region>
<country>AUS</country>
<count>3</count>
</region>
<region>
<country>BEL</country>
<count>1</count>
</region>
<region>
<country>PER</country>
<count>1</count>
</region>
<region>
<country>ALA</country>
<count>5</count>
</region>
</employees>
</root>
这是我的XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<xsl:variable name="map">
<entry key="AGO">Angola</entry>
<entry key="ALA">Alaska</entry>
<entry key="AUS">Australia</entry>
<entry key="PER">Peru</entry>
<entry key="NKO">Not Known</entry>
</xsl:variable>
<xsl:template match="employees">
<html>
<body>
<div>
<table>
<xsl:variable name="test" select="region[count > 0]"></xsl:variable>
<xsl:for-each select="$test[position() mod 2 = 1]">
<tr>
<td>
<xsl:variable name="countryLeft" select="country"></xsl:variable>
<xsl:value-of select="msxsl:node-set($map)/entry[@key=$countryLeft]"/>
</td>
<td>
<xsl:variable name="countryRight" select="following-sibling::region/country"></xsl:variable>
<xsl:value-of select="msxsl:node-set($map)/entry[@key=$countryRight]"/>
</td>
</tr>
</xsl:for-each>
</table>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT应该从XML中获取每两个区域,并将它们显示在具有两列的表行中,每个区域一个。它还应将源国家/地区代码映射到相应的显示名称。在此示例中,我将国家/地区地图存储在名为map
的XSLT变量中,但同样可以从另一个XML文件(使用document()
函数)中读取它,并且会发生相同的问题。>
我期望输出如下:
Australia | Belgium
--------------------
Peru | Alaska
但它正在返回:
Australia | Alaska
------------------
Peru | Alaska
这里是一个XSLT提琴,演示了这个问题:
https://xsltfiddle.liberty-development.net/eiZQaGp/6
我怀疑问题在于将国家代码映射到显示名称,因为如果我不这样做,那么国家代码将正确显示在输出HTML表中。
我在XSLT方面没有太多经验,因此希望对我要去哪里的问题提供一些指导。
答案 0 :(得分:1)
恐怕对此我没有很好的解释,但是如果您进行更改:
<xsl:variable name="countryRight" select="following-sibling::region/country"></xsl:variable>
收件人:
<xsl:variable name="countryRight" select="following-sibling::region[1]/country"></xsl:variable>
它将按预期工作:https://xsltfiddle.liberty-development.net/eiZQaGp/7