VegetaSSJ5
24-06-2005, 11:37
Devo trasformare un file xml in una pagina xhtml. Vorrei scrivere tutto a parole ma non ci si capirebbe nulla, così metto direttamente l'esempio, che cmq è corto. Questo è il codice XML:<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<documento>
<header>
Lasagna allo scoglio
</header>
</documento>E questo è il file di trasformazione XSLT:<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<html>
<head>
<title>Pagina di prova</title>
<meta name="description" content="Pagina XHTML per la prova parziale di SID" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="./style.css" type="text/css" />
</head>
<body style="background-color: #eee;">
<div id="content">
<xsl:apply-templates select="document/header" />
</div>
</body>
</html>
</xsl:template>
<xsl:template match="header">
<div id="header" style="font-size: 32px;">
<xsl:value-of select="current()" />
</div>
</xsl:template>
</xsl:stylesheet>Perchè quando richiamo l'apply-templates scegliendo il nodo "document/header" oppure "/document/header" non succede niente invece se scelgo "//header" fa match e inserisce regolarmente il testo? L'espressione // non significa il successore del nodo corrente (che al momento della chiamata era il nodo root /) e quindi il discendente di root è document?
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<documento>
<header>
Lasagna allo scoglio
</header>
</documento>E questo è il file di trasformazione XSLT:<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/">
<html>
<head>
<title>Pagina di prova</title>
<meta name="description" content="Pagina XHTML per la prova parziale di SID" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="./style.css" type="text/css" />
</head>
<body style="background-color: #eee;">
<div id="content">
<xsl:apply-templates select="document/header" />
</div>
</body>
</html>
</xsl:template>
<xsl:template match="header">
<div id="header" style="font-size: 32px;">
<xsl:value-of select="current()" />
</div>
</xsl:template>
</xsl:stylesheet>Perchè quando richiamo l'apply-templates scegliendo il nodo "document/header" oppure "/document/header" non succede niente invece se scelgo "//header" fa match e inserisce regolarmente il testo? L'espressione // non significa il successore del nodo corrente (che al momento della chiamata era il nodo root /) e quindi il discendente di root è document?