Sono molto nuovo a XML e XSLT. Sto cercando di "trasformare" un documento xml usando xslt. Sfortunatamente, questo non funziona correttamente. Viene visualizzato il seguente errore "Errore durante la trasformazione XSLT: trasformazione XSLT non riuscita." in FireFox quando si tenta di caricare il file xml. Chrome carica solo una pagina vuota. Entrambi i file XML e XSLT vengono caricati nel browser in modo indipendente, a indicare che sono entrambi ben formati. Ecco il file XSL:
<wb:stylesheet version="3.0"
xmlns:wb="http://www.w3.org/1999/XSL/Transform">
<wb:template match="/">
<html>
<body>
<h2>Name: <wb:value-of select="wb:world/wb:name" /></h2>
<p><wb:vlaue-of select="wb:world/wb:desc" /></p>
</body>
</html>
</wb:template>
</wb:stylesheet>
e qui c'è il file XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="./world.xsl"?>
<world
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance"
wb:schemaLocation="./ world.xsd">
<wb:name>Arizelos</wb:name>
<wb:desc>
</wb:desc>
<wb:nation>
<wb:name>Whatever</wb:name>
<wb:map>map01.png</wb:map>
<wb:number>1</wb:number>
<wb:desc>Whatever</wb:desc>
<wb:county>
<wb:name>Whatever</wb:name>
<wb:size>City-State</wb:size>
<wb:number>1</wb:number>
<wb:desc>Whatever</wb:desc>
<wb:community>
<wb:name>Test</wb:name>
<wb:size>City</wb:size>
<wb:number>1</wb:number>
<wb:desc>Whatever</wb:desc>
<wb:profession>
<wb:name>Sorcerer</wb:name>
<wb:number>1</wb:number>
<wb:desc>Whatever</wb:desc>
<wb:person>
<wb:name>Harry Potter</wb:name>
<wb:number>1</wb:number>
<wb:desc>Whatever</wb:desc>
<wb:charsheet>
</wb:charsheet>
</wb:person>
</wb:profession>
</wb:community>
</wb:county>
</wb:nation>
<wb:religion>
<wb:name>Phony</wb:name>
<wb:desc>But aren"t they all?</wb:desc>
<wb:deity>
<wb:name>John Doe</wb:name>
<wb:gender>Male</wb:gender>
<wb:desc>I never considered him divine</wb:desc>
</wb:deity>
</wb:religion>
</world>
Vi ringrazio anticipatamente per l'aiuto :)
risposte:
0 per risposta № 1Ci sono lotto di problemi con il tuo codice. Permettetemi di indicare alcuni di loro.
Nel tuo foglio di stile XSLT,
- hai dichiarato un prefisso non standard per lo spazio dei nomi XSLT:
xmlns:wb="http://www.w3.org/1999/XSL/Transform"
. Sebbene tu possa usare qualunque prefisso ti piaccia,xsl
è lo standard di fatto per questo. Tutto il resto è semplicemente confuso. - hai non dichiarato lo spazio dei nomi presente nel tuo XML di input (
http://www.w3.org/2001/XMLSchema-instance
). - Inoltre, è spiacevole che tu usi lo stesso prefisso per indicare URI di namespace diversi nel tuo foglio di stile XML e XSLT.
- ti riferisci a
wb:world
anche se ilworld
l'elemento non ha uno spazio dei nomi - il tuo foglio di stile è la versione 3.0, ma il tuo browser supporta solo 1.0 e XSLT 3.0 è ancora una bozza funzionante.
- c'è un errore di battitura:
vlaue-of
che dovrebbe leggerexsl:value-of
Nel tuo XML di input,
- c'è questa dichiarazione dello spazio dei nomi:
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance"
. Di nuovo, questo è un prefisso non standard - dovresti usarexsi
. Tuttavia, non sono sicuro se intendevi utilizzare lo spazio dei nomi per le istanze dello schema.
Foglio di stile
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance">
<xsl:template match="/">
<html>
<body>
<h2>Name: <xsl:value-of select="world/wb:name" /></h2>
<p><xsl:value-of select="world/wb:desc" /></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Produzione
desc
è vuoto, quindi non viene prodotto nulla all'interno p
.
<html xmlns:wb="http://www.w3.org/2001/XMLSchema-instance">
<body>
<h2>Name: Arizelos</h2>
<p>
</p>
</body>
</html>