/ / XSLT Transformation ERROR - xml, xslt

ERRORE di trasformazione XSLT - xml, xslt

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 № 1

Ci 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 il world 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 leggere xsl: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 usare xsi. 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>