Wie deklariert und iteriert man ein Array in XSLT?

Meine Anforderung ist - mit XSLT - eine Dropdown-Liste mit den US-Bundesstaaten anzuzeigen und drucken 'ausgewählt' auf einem bestimmten, der im XML deklariert ist, der mein Stylesheet verwendet.

Ich dachte darüber nach, ein Array mit den Staaten zu deklarieren und es zu iterieren, aber ich weiß nicht, wie ich es tun soll.

HINWEIS: Weitere Ideen sind willkommen ;)

Antwort auf "Wie deklariert und iteriert man ein Array in XSLT? " 2 von antworten

Wenn Sie den XML-Code nicht bearbeiten können, können Sie die Verwendung des document function to load data from a second data file: zum Laden von Daten aus einer zweiten Datendatei ansehen:

Idealerweise würden Sie die Liste der Zustände in Ihrer XML-Datei speichern und einfach XSLT verwenden, um sie zu iterieren.

Update:

Eine Möglichkeit, dies zu tun, ist, die Zustandsdaten in das Stylesheet selbst einzubetten und mit document(''), as follows: auf das Stylesheet-Dokument zuzugreifen:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:my="whatever"
  exclude-result-prefixes="my">

  <xsl:output indent="yes"/>

  <!-- The value of the state you want to select, supplied in the input XML -->
  <xsl:variable name="selected-state" select="/xpath/to/state/value"/>

  <!-- You have to use a namespace, or the XSLT processor will complain -->
  <my:states>
    <option>Alabama</option>
    <option>Alaska</option>
    <!-- ... -->
    <option>Wisconsin</option>
    <option>Wyoming</option>
  </my:states>

  <xsl:template match="/">
    <!-- rest of HTML -->
    <select name="state">
      <!-- Access the embedded document as an internal "config" file -->
      <xsl:apply-templates select="document('')/*/my:states/option"/>
    </select>
    <!-- rest of HTML -->
  </xsl:template>

          <!-- Copy each option -->
          <xsl:template match="option">
            <xsl:copy>
              <!-- Add selected="selected" if this is the one -->
              <xsl:if test=". = $selected-state">
                <xsl:attribute name="selected">selected</xsl:attribute>
              </xsl:if>
              <xsl:value-of select="."/>
            </xsl:copy>
          </xsl:template>

</xsl:stylesheet>

Lassen Sie mich wissen, wenn Sie Fragen haben.