XSLT - преобразование ввода XML в таблицу HTML с двумя столбцами - PullRequest
0 голосов
/ 03 декабря 2018

Вот мой исходный 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 &gt; 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, поэтому я был бы признателен за некоторые рекомендации относительно того, где я иду не так.

1 Ответ

0 голосов
/ 03 декабря 2018

Боюсь, у меня нет хорошего объяснения этому, но если вы измените:

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...