Вот мой XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<employees>
<region>
<country>AUS</country>
<count>1</count>
</region>
<region>
<country>BEL</country>
<count>0</count>
</region>
<region>
<country>PER</country>
<count>3</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">
</xsl:variable>
<xsl:template match="employees">
<html>
<body>
<table>
<xsl:variable name="regionsWithNonZeroCount" select="region[count > 0]"></xsl:variable>
<xsl:for-each select="$regionsWithNonZeroCount[position() mod 2 = 1]">
<tr>
<td><xsl:value-of select="country"/></td>
<td><xsl:value-of select="following-sibling::region/country"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Прежде всего, XSLT должен исключить все регионы, в которых количество не превышает0 (т. Е. Он должен исключать BEL), а из остальных регионов он должен занимать по два за раз и отображать их в строке таблицы с двумя столбцами, по одному для каждого региона.
Вот результат, который я ожидаю:
AUS | PER
-----------
ALA |
Однако фактический результат выглядит следующим образом:
AUS | BEL
-----------
ALA |
Вот скрипта XSLT, демонстрирующая проблему:
https://xsltfiddle.liberty -development.net / eiZQaGp / 9
Я не понимаю, почему BEL выводится, когда переменная regionsWithNonZeroCount
перебирается вxsl:for-each
цикл не должен включать BEL.Я подозреваю, что following-sibling
не учитывает условие select
для переменной regionsWithNonZeroCount
, которая должна исключать BEL.У меня нет большого опыта работы с XSLT, поэтому любые предложения о том, как достичь желаемого результата, будут оценены.