This is my 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>
And this is my 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>
I'm supposed to get <nombre>
and all the <ciudad>
that are inside the <pais>
, but I don't know why it only shows this:
España
•Barcelona
Francia
•Bordeaux
Alemania
•Aschaffenburg
Italia
•Florencia
Suiza
•Basilea
Estados Unidos
•Chicago
Any idea on how to solve it?? I think it's something related with the "id" that are inside <pais>
but I've tried with choose or with if but nothing works, it only shows the first <ciudad>
of each <pais>
.
Thanks in advance.
CodePudding user response:
Change the for-each select to this:
<xsl:for-each select="ciudades/ciudad">
And I suppose the li belongs inside that loop like this:
<ul>
<xsl:for-each select="ciudades/ciudad">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ul>
As an alternative using for-each you also could use the apply-templates approach like this:
<?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>