IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XPATH] Mauvais espace de nom pour les fonctions XPath?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [XPATH] Mauvais espace de nom pour les fonctions XPath?
    Bonjour à tous,

    J'ai besoin d'utiliser la fonction document-uri ou base-uri pour récupérer le nom du fichier XML actuellement transformé par le XSL.
    Ces 2 fonctions appartiennant à XPath, j'ai donc ajouté le namespace correspondant en début de fichier xsl:

    Mon fichier XSL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="2.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:fn="http://www.w3.org/2004/07/xpath-functions" >
     
    <xsl:output method="text"/>
     
    <xsl:template match=".......">
    	<xsl:call-template name="xyz"/>
    </xsl:template>
     
    <xsl:template name="xyz">
     Doc=<xsl:value-of select="fn:document-uri(.)"/>
     
    </xsl:template>
    </xsl:stylesheet>
    Le problème, c'est qu'après avoir ajouté ce namespace, lors de la transformation, XMLSpy (et IE) me disent :
    "XSL transformation failed due to following error:
    Namespace 'http://www.w3.org/2004/07/xpath-functions' does not contain any functions."

    J'ai d'abord cru à une mauvaise syntaxe lors de l'ajout du namespace, donc pour vérifier j'ai essayé d'ajouter d'autres namespaces (inutiles pour moi ici).
    Ceci fonctionne si on enlève l'appel à la fonction fn:document-uri :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    ...

    Mais le code ci-dessous ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2004/07/xpath-functions">
    Il retourne la même erreur.

    Et en effet, en regardant le fichier http://www.w3.org/2004/07/xpath-functions, on voit bien qu'il est très différent de "http://www.w3.org/1999/XSL/Transform" et xmlnss="http://www.w3.org/2001/XMLSchema".
    Par contre je ne trouve pas de "fichier de description de fonctions" (je ne sais pas si ça s'appelle comme ça) qui pourrait aller pour XPath.
    W3C me renvoit à xmlns:fn="http://www.w3.org/2004/07/xpath-functions" ou "http://www.w3.org/2005/xpath-functions" (qui ne marche pas, c'est bizarre)

    Merci d'avance de votre aide...

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Il y a 2 versions de XPath, idem pour XSLT, et la seconde (fn:*, ...) n'est pas fréquemment disponible (Microsoft, par exemple, a préféré améliorer ses performances pour la version 1.0 plutôt que d'implémenter la 2.0 ...).
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Existe t-il une solution en version 1.0 pour afficher le nom du fichier XML "courant" ?

  4. #4
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Avec XSLT 1.0, il n'est, à mon avis, pas possible de parler de "fichier courant" car une transformation ne s'applique qu'à un document XML chargé en mémoire.

    Quand on lance soi-même la transformation, c'est-à-dire pas dans le cas d'une transformation initiée par un navigateur, on peut adjoindre des paramètres. C'est comme cela que j'ai pris l'habitude de passer le nom de fichier courant à la transformation...
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

Discussions similaires

  1. espace de nom pour TIdAttachment dans delphi 2005
    Par rigaldies dans le forum Web & réseau
    Réponses: 2
    Dernier message: 24/04/2010, 14h42
  2. besoin d aide pour les fonction en postgresql
    Par dannw dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 11/07/2007, 21h20
  3. Espace disque alloué pour les entiers
    Par stos dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/10/2006, 14h17
  4. [XSL]Impossible d'utiliser les fonctions XPath 2.0
    Par cvmz dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/03/2006, 19h19
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo