XSLT Ignorer espace de noms
Je suis en train de m'habituer à XSLT, et je comprends la raison pour les espaces de noms, mais je suis simplement en train d'essayer de convertir locale des fichiers XML pour être consommé par une application locale.
Je suis en train d'essayer de convertir le fichier qui se trouve ici: http://uscodebeta.house.gov/download/releasepoints/us/pl/113/31/[email protected]
l'aide de ce code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" name="xml"/>
<xsl:template match="//title">
<xsl:for-each select="section">
<xsl:variable name="href"><xsl:value-of select="ancestor::title/num/@value" />-<xsl:value-of select="ancestor::chapter/num/@value" />-<xsl:value-of select="num/@value" />.xml</xsl:variable>
<xsl:result-document href="$href">
<xsl:element name="structure">
<xsl:element name="unit">
<xsl:attribute name="label">title</xsl:attribute>
<xsl:attribute name="identifier">
<xsl:value-of select="ancestor::title/num/@value" />
</xsl:attribute>
<xsl:attribute name="order_by">
<xsl:value-of select="ancestor::title/num/@value" />
</xsl:attribute>
<xsl:attribute name="level">1</xsl:attribute>
<xsl:value-of select="ancestor::title/num" /> <xsl:value-of select="ancestor::title/heading"/>
</xsl:element>
</xsl:element>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
dans l'exemple de XML trouvé ici:
https://github.com/statedecoded/statedecoded/wiki/XML-Format-for-Parser
C'est la conversion pour le premier élément, mais lors de l'exécution avec Saxon sur la ligne de commande, je reçois l'alerte:
Warning: SXXP0005: The source document is in namespace http://xml.house.gov/schemas/uslm/1.0, but all the template rules match elements in no namespace
et la sortie est du texte brut au lieu de balises XML.
Toute aide serait grandement appréciée.
Grâce
OriginalL'auteur Chris | 2013-09-10
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes à l'aide de XSLT 2.0, vous pouvez ajouter le
xpath-default-namespace
attribut surxsl:stylesheet
. Voir http://www.w3.org/TR/xslt20/#standard-attributes pour plus de détails.Par exemple:
Vous avez également la possibilité d'utiliser
*
comme préfixe pour chaque élément dans votre chemin. Qui pourrait être beaucoup de travail, si votre feuille de style se développe.Exemple:
Exemple complet:
Je n'ai pas regardé les données, mais êtes-vous sûr que
section
est un enfant detitle
? C'est ce que votre XSLT, c'est dire.Juste regardé les données.
section
est un descendant detitle
. Essayez de changer laselect
dans lexsl:for-each
àchapter/section
.J'ai ajouté un exemple complet. Aussi, remarquez comment je ne l'ai pas utiliser
xsl:element
,xsl:attribute
, ouxsl:for-each
. Le{}
dans les attributs sont la valeur de l'attribut modèles (w3.org/TR/xslt#attribute-value-templates). Très pratique.Après avoir fait ce changement et à l'aide de {$href} au lieu de seulement $href, dans la suite du document attribut href, il a travaillé comme un charme! Merci pour l'aide.
OriginalL'auteur Daniel Haley