Вот мой исходный 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 и отобразить их в строке таблицыс двумя столбцами, по одному для каждого региона.Следует также сопоставить исходный код страны с соответствующим отображаемым именем.В этом примере я храню карту страны в переменной XSLT с именем map
, но я также мог бы прочитать ее из другого файла XML (используя функцию document()
), и возникла та же проблема.
Я ожидаю, что результат будет следующим:
Australia | Belgium
--------------------
Peru | Alaska
Но он возвращается:
Australia | Alaska
------------------
Peru | Alaska
Вот скрипта XSLT, демонстрирующая проблему:
https://xsltfiddle.liberty -development.net / eiZQaGp / 6
Я подозреваю, что проблема связана с отображением кода страны на отображаемое имя, потому что, если я этого не сделаю, коды стран отображаются правильнов выходной таблице HTML.
У меня нет большого опыта работы с XSLT, поэтому я был бы признателен за некоторые рекомендации относительно того, где я иду не так.