J'essaie d'utiliser XSL pour transformer deux fichiers XML en HTML. J'ai tout fonctionne, mais j'ai un problème. Un des fichiers XML contient des informations variées que je tire de. Il n'y a aucune déclaration d'espace de noms dans le fichier, mais les nœuds auxquels j'ai besoin d'accéder sont préfixés par l'espace de noms. Mon correctif d'origine consistait à ajouter les espaces de noms au nœud racine, mais j'ai découvert que je ne pouvais pas le faire car les fichiers ne pouvaient pas être modifiés.Importer XML dans XSL qui n'a pas d'espace de noms sur le nœud racine
Si je quitte les namespaces off, je reçois le texte suivant dans Firefox:
XML Parsing Error: prefix not bound to a namespace
Les espaces de noms doivent être (mais n'existent pas dans le fichier XML source):
xmlns:prop="http://www.blank.com/prop"
xmlns:item="http://www.blank.com/item"
Comment faire Je résous ça?
XML:
<?xml version="1.0" encoding="UTF-8"?>
<collection>
<prop:id>123</prop:id>
<document>
<item:name>Document</item:name>
</document>
</collection>
XSL: (ni de la valeur des éléments de travail)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:variable name="propsPath" select="test_Props.xml"/>
<xsl:variable name="props" select="document($propsPath)" />
<xsl:template match="/">
<html><body><div>
<xsl:value-of select="$props/collection/*[local-name() = 'id']"/>
<xsl:value-of select="$props/collection/prop:id"/>
</div></body></html>
</xsl:template>
</xsl:stylesheet>
Si votre entrée utilise des préfixes sans les lier à un espace de noms, ce n'est pas un document XML bien formé et ne peut pas être traité par XSLT. –