Tout d'abord, assurez-vous que tous les espaces de noms que vous souhaitez utiliser sont disponibles dans le xslt. Par exemple, définir des préfixes xmlns pour tous dans l'élément supérieur, comme ceci:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:jskit="http://purl.org/dc/elements/1.1/"
>
... xslt templates go here...
</xsl:stylesheet>
Après cela, vous pouvez utiliser le préfixe espace de noms jskit dans vos expressions XPath.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:jskit="http://purl.org/dc/elements/1.1/"
>
<!-- match all items anywhere in the document -->
<xsl:template match="//item">
<!-- get the "value" attribute of the "jskit:attribute" element
in the current item in case the "key" attribute is called "permalink"
-->
<xsl:value-of select="jskit:attribute[@key='permalink']/@value"/>
, <!-- comma separator, literal txt -->
<!-- get the "value" attribute of the "jskit:attribute" element
in the current item in case the "key" attribute is called "IP"
-->
<xsl:value-of select="jskit:attribute[@key='IP']/@value"/>
</xsl:template>
</xsl:stylesheet>
Les modèles et XPath vous devez écrire sont totalement dépendants des exigences de votre format de sortie souhaité et ce n'est pas facile de répondre en totalité si nous ne disposons pas que nformation
Mais disons que vous voulez insérer les données dans une base de données, vous pouvez ensuite générer des instructions SQL directement avec XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:jskit="http://purl.org/dc/elements/1.1/"
>
<!-- make text output (SQL script) -->
<xsl:output
method="text"
/>
<!-- match all items anywhere in the document -->
<xsl:template match="//item">
INSERT INTO myTable(permalink, IP) VALUES
('<xsl:value-of select="jskit:attribute[@key='permalink']/@value"/>'
,'<xsl:value-of select="jskit:attribute[@key='IP']/@value"/>');
</xsl:template>
</xsl:stylesheet>
Cependant, pour faire ce genre de chose vraiment robuste, vous devez vous assurer que les valeurs qui se retrouvent dans l'instruction SQL ne contient aucune chaîne de limiteur. Si, par exemple, le lien permanent pouvait contenir un seul guillemet, cela générerait un SQL non valide car la citation unique de la valeur mettrait prématurément fin à la valeur SQL littérale de la chaîne.
Pour contrer cela, vous pouvez écrire un modèle qui traite de manière récursive les valeurs de texte pour échapper à ces personnages qui en ont besoin (en dehors de la citation et en fonction de votre base de données dont vous avez besoin pour échapper à d'autres personnages aussi)
Anothter approche serait d'utiliser le XSLT pour convertir les données dans un format que vous pouvez facilement analyser dans votre langue hôte. Supposons que vous utilisez PHP, alors vous pouvez utiliser XSLT pour convertir le format XML en format de fichier ini, l'analyser avec parse_ini_file(), puis utiliser PHP pour échapper/valider correctement les valeurs et ensuite effectuer les actions de base de données.
YMMV
@peter .. thx tant pour l'exemple complet si je l'attache xsl au xml je reçois l'erreur erreur sur la ligne 1 à la colonne 25: Contenu supplémentaire à la fin de le document – vk123
Le xslt va dans le fichier .xsl et le xml dans le fichier .xml. Pour attacher le xslt à un fichier XML, vous devez utiliser quelque chose comme ça Xml-stylesheet href = "rss.xsl" type = "texte/xsl"?> –
merci Peter et Roland! Obtenir quelque chose qui fonctionne enfin! – vk123