XSL 只显示第一个值

XSL only shows first values

这是我的XML

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="practica4.xsl"?>
<paises>
    <pais id="p1">
        <nombre>España</nombre>
        <continente>Europa</continente>
        <capital>Madrid</capital>
        <superficie>504750</superficie>
        <poblacion>39181114</poblacion>
        <ciudades>
            <ciudad>Barcelona</ciudad>
            <ciudad>Valencia</ciudad>
            <ciudad>Sevilla</ciudad>
            <ciudad>Zaragoza</ciudad>
            <ciudad>Bilbao</ciudad>
        </ciudades>
        <lenguas>
            <lengua>Español</lengua>
            <lengua>Catalan</lengua>
            <lengua>Euskera</lengua>
            <lengua>Asturiano</lengua>
            <lengua>Gallego</lengua>
        </lenguas>
        <religiones>
            <religion>Catolicos romanos</religion>
        </religiones>
        <moneda>Euro</moneda>
        <gobierno>Monarquía Constitucional</gobierno>
    </pais>
    <pais id="p2">
        <nombre>Francia</nombre>
        <continente>Europa</continente>
        <capital>Paris</capital>
        <superficie>547030</superficie>
        <poblacion>58317450</poblacion>
        <ciudades>
            <ciudad>Bordeaux</ciudad>
            <ciudad>Cannes</ciudad>
            <ciudad>Lyon</ciudad>
            <ciudad>Marseille</ciudad>
            <ciudad>Nantes</ciudad>
            <ciudad>Strasbourg</ciudad>
        </ciudades>
        <lenguas>
            <lengua>Frances</lengua>
        </lenguas>
        <religiones>
            <religion>Catolicos romanos</religion>
            <religion>Protestantes</religion>
            <religion>Judios</religion>
            <religion>Musulmanes</religion>
        </religiones>
        <moneda>Euro</moneda>
        <gobierno>República</gobierno>
    </pais>
    <pais id="p3">
        <nombre>Alemania</nombre>
        <continente>Europa</continente>
        <capital>Berlin</capital>
        <superficie>356910</superficie>
        <poblacion>83536115</poblacion>
        <ciudades>
            <ciudad>Aschaffenburg</ciudad>
            <ciudad>Bonn</ciudad>
            <ciudad>Colonia</ciudad>
            <ciudad>Frankfurt</ciudad>
            <ciudad>Hamburg</ciudad>
            <ciudad>Hannover</ciudad>
            <ciudad>Munich</ciudad>
            <ciudad>Nuremberg</ciudad>
            <ciudad>Stuttgart</ciudad>
        </ciudades>
        <lenguas>
            <lengua>Aleman</lengua>
        </lenguas>
        <religiones>
            <religion>Protestantes</religion>
            <religion>Catolicos romanos</religion>
        </religiones>
        <moneda>Euro</moneda>
        <gobierno>República Federal</gobierno>
    </pais>
    <pais id="p4">
        <nombre>Italia</nombre>
        <continente>Europa</continente>
        <capital>Roma</capital>
        <superficie>301230</superficie>
        <poblacion>57460274</poblacion>
        <ciudades>
            <ciudad>Florencia</ciudad>
            <ciudad>Genova</ciudad>
            <ciudad>Milan</ciudad>
            <ciudad>Napoli</ciudad>
            <ciudad>Palermo</ciudad>
            <ciudad>Roma</ciudad>
            <ciudad>Turin</ciudad>
        </ciudades>
        <lenguas>
            <lengua>Italiano</lengua>
        </lenguas>
        <religiones>
            <religion>Catolicos romanos</religion>
        </religiones>
        <moneda>Euro</moneda>
        <gobierno>República</gobierno>
    </pais>
    <pais id="p5">
        <nombre>Suiza</nombre>
        <continente>Europa</continente>
        <capital>Ginebra</capital>
        <superficie>41290</superficie>
        <poblacion>7207060</poblacion>
        <ciudades>
            <ciudad>Basilea</ciudad>
            <ciudad>Lausanne</ciudad>
            <ciudad>Zurich</ciudad>
        </ciudades>
        <lenguas>
            <lengua>Aleman</lengua>
            <lengua>Frances</lengua>
            <lengua>Italiano</lengua>
        </lenguas>
        <religiones>
            <religion>Catolicos romanos</religion>
            <religion>Protestantes</religion>
        </religiones>
        <moneda>Franco Suizo</moneda>
        <gobierno>República Federal</gobierno>
    </pais>
    <pais id="p6">
        <nombre>Estados Unidos</nombre>
        <continente>America del Norte</continente>
        <capital>Washington</capital>
        <superficie>9372610</superficie>
        <poblacion>266476278</poblacion>
        <ciudades>
            <ciudad>Chicago</ciudad>
            <ciudad>Los Angeles</ciudad>
            <ciudad>New York</ciudad>
            <ciudad>San Francisco</ciudad>
        </ciudades>
        <lenguas>
            <lengua>Ingles</lengua>
            <lengua>Español</lengua>
        </lenguas>
        <religiones>
            <religion>Protestantes</religion>
            <religion>Catolicos romanos</religion>
            <religion>Judios</religion>
        </religiones>
        <moneda>Dolar</moneda>
        <gobierno>República Federal</gobierno>
    </pais>
</paises>

这是我的 xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html lang="es">
            <head>
                <meta charset="UTF-8"/>
                <title>Document</title>
            </head>
            <body>
                <xsl:for-each select="paises/pais">
                    <h2>
                        <xsl:value-of select="nombre"/>
                    </h2>
                    <ul>
                        <li>
                            <xsl:for-each select="ciudades">
                                <xsl:value-of select="ciudad"/>
                                <xsl:text> </xsl:text>
                            </xsl:for-each>
                        </li>
                    </ul>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

我应该得到 <nombre><pais> 内的所有 <ciudad>,但我不知道为什么它只显示这个:

España
•Barcelona 

Francia
•Bordeaux 

Alemania
•Aschaffenburg 

Italia
•Florencia 

Suiza
•Basilea 

Estados Unidos
•Chicago 

知道如何解决吗??我认为它与 <pais> 中的“id”有关,但我尝试使用 choose 或 if 但没有任何效果,它只显示每个 <pais> 的第一个 <ciudad>

提前致谢。

将 for-each select 更改为:

<xsl:for-each select="ciudades/ciudad">

我想 li 属于这样的循环:

  <ul>
    <xsl:for-each select="ciudades/ciudad">
      <li>
        <xsl:value-of select="."/>
      </li>
    </xsl:for-each>
  </ul>

作为使用 for-each 的替代方法,您也可以像这样使用 apply-templates approach

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
  <xsl:output method="html" indent="yes"/>
  
  <xsl:strip-space elements="*"/>
  
  <xsl:template match="/paises">
    <html lang="es">
      <head>
        <meta charset="UTF-8"/>
        <title>Document</title>
      </head>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
  
  <!-- Default for elements that don't have a match. Do nothing -->
  <xsl:template match="*"/>
    
  <xsl:template match="pais">
    <h2>
      <xsl:value-of select="nombre"/>
    </h2>
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="ciudades">
    <ul>
      <xsl:apply-templates/>
    </ul>
  </xsl:template>
  
  <xsl:template match="ciudad">
    <li>
      <xsl:apply-templates/>
    </li>
  </xsl:template>

</xsl:stylesheet>