как правильно использовать for-each в файлах xslt? - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в XSLT-файлах для преобразования XML в X HTML. Я применяю все тщательно, но я не смог подать заявку на каждого.

Я этот простой XML файл

<?xml version="1.0" encoding="utf-8" ?>
<Company>
    <name>El Alamia</name>
    <Profesion></Profesion>    
    <address>
      <item>Alamia street</item>
    </address>
    <logo>
      logo
    </logo>
    <GoogleMap>
      <altitude>00000000000000</altitude>
      <longtude>11111111111111</longtude>
    </GoogleMap>
    <phone>
      <item>(+44) 123 456 789</item>
      <item>(+44) 123 456 789</item>
      <item>(+44) 123 456 789</item>
    </phone>
    <fax>
      <item>(+44) 123 456 789</item>
      <item>(+44) 123 456 789</item>
      <item>(+44) 123 456 789</item>
    </fax>
    <email>
      <item>Alamia@Alamia.com</item>
      <item>Alamia@Alamia.com</item>
      <item>Alamia@Alamia.com</item>
    </email>
    <facebook>
      <item>Alamia.facebook.com</item>
      <item>Alamia.facebook.com</item>
      <item>Alamia.facebook.com</item>
    </facebook>
    <Twitter>
      <item>Alamia.twitter.com</item>
      <item>Alamia.twitter.com</item>
      <item>Alamia.twitter.com</item>
    </Twitter>
    <LinkedIn>
      <item>Alamia.linkedin.com</item>
      <item>Alamia.linkedin.com</item>
      <item>Alamia.linkedin.com</item>
    </LinkedIn>
</Company>

Я пытаюсь преобразовать его с помощью этого XSLT-файла

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
    <div>
      <table>
        <tr>
          <td style="width: 150px"></td>
          <td>Name:</td>
          <td>
            <xsl:value-of select="Company/name" />
          </td>
          <td style="width: 150px"></td>
        </tr>
        <tr>
          <td></td>
          <td>Profesion:</td>
          <td>
            <xsl:value-of select="Company/Profesion" />
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>address</td>
          <td>
            <xsl:value-of select="Company/address" />
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>logo:</td>
          <td>
            <xsl:value-of select="Company/logo" />
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>GoogleMap:</td>
          <td>
            <xsl:value-of select="Company/GoogleMap/altitude" />
            <br />
            <xsl:value-of select="Company/GoogleMap/longtude" />
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>phone:</td>
          <td>
            <ul>
              <xsl:for-each select="Company/phone">
                <li>
                  <xsl:value-of select="item"/>
                </li>
              </xsl:for-each>
            </ul>
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>fax:</td>
          <td>
            <ul>
              <xsl:for-each select="Company/fax">
                <li>
                  <xsl:value-of select="item"/>
                </li>
              </xsl:for-each>
            </ul>
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>email:</td>
          <td>
            <ul>
              <xsl:for-each select="Company/email">
                <li>
                  <xsl:value-of select="item"/>
                </li>
              </xsl:for-each>
            </ul>
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>facebook:</td>
          <td>
            <ul>
              <xsl:for-each select="Company/facebook">
                <li>
                  <xsl:value-of select="item"/>
                </li>
              </xsl:for-each>
            </ul>
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td></td>
          <td>Twitter:</td>
          <td>
            <ul>
              <xsl:for-each select="Company/Twitter">
                <li>
                  <xsl:value-of select="item"/>
                </li>
              </xsl:for-each>
            </ul>
          </td>
          <td>
          </td>
        </tr>
        <tr>
          <td>
          </td>
          <td>LinkedIn:</td>
          <td>
            <ul>
              <xsl:for-each select="Company/LinkedIn">
                <li>
                  <xsl:value-of select="item"/>
                </li>
              </xsl:for-each>
            </ul>
          </td>
          <td>
          </td>
        </tr>
      </table>
    </div>
  </xsl:template>

</xsl:stylesheet>

Все отображается нормально, но начинает отображаться только один элемент, начиная с for-each, хотя в файле XML есть 3 элемента !!

Я что-то не так написал?

1 Ответ

0 голосов
/ 26 апреля 2020

Вам необходимо переписать это:

<xsl:for-each select="Company/phone">
  <li>
    <xsl:value-of select="item"/>
  </li>
</xsl:for-each>

As

<xsl:for-each select="Company/phone/item">
  <li>
    <xsl:value-of select="."/>
  </li>
</xsl:for-each>

(То же самое для факса / электронной почты / et c.)

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