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 :

[XSLT] Quand substring-before ne renvoie rien


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut [XSLT] Quand substring-before ne renvoie rien
    Bonjour,

    Dans un substring-before, si le deuxième argument n'est pas contenu dans le premier argument, la fonction ne renvoie rien. Moi je souhaiterais que que dans ce cas là, la fonction me renvoie le premier argument. Est-ce possible autrement que d'utiliser un if test=contains avant ?

    Sinon, j'en profite pour poser une deuxième question :
    dans un xsl, en étant positionné sur un noeud (NoeudFils), et qu'on veuille se positionner sur le noeud père, qu'est-ce qui est plus rapide pour le parser : lui indiquer le chemin complet (/Noeud1/Noeud2/NoeudPère/NoeudFils) ou lui indiquer (../NoeudPère).

    Merci.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par NicaeaCivitas
    Dans un substring-before, si le deuxième argument n'est pas contenu dans le premier argument, la fonction ne renvoie rien. Moi je souhaiterais que que dans ce cas là, la fonction me renvoie le premier argument. Est-ce possible autrement que d'utiliser un if test=contains avant ?
    Heu... non. La specification de "substring-before" est claire et précise. Si la substring est introuvable, ca renvoie vide.

    Sinon, j'en profite pour poser une deuxième question :
    dans un xsl, en étant positionné sur un noeud (NoeudFils), et qu'on veuille se positionner sur le noeud père, qu'est-ce qui est plus rapide pour le parser : lui indiquer le chemin complet (/Noeud1/Noeud2/NoeudPère) ou lui indiquer (..).
    Bah ca depend de ton engine XPath et de ton parseur (stockage des noeuds, expression xpath précalculée, ...). Sans parler de performance, la seconde approche ("..") me parrait plus claire.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut
    Merci pour ta réponse.

    Et sinon en XML il n'y pas une fonction qui fait ce que je souhaite ? Par exemple, j'analyse une chaine de caractères et s'il y a un point (.) dedans, cela me renvoie tout ce qu'il y a avant le point, s'il n'y a pas de point, cela me renvoie toute la chaine. Suite à ta réponse j'ai donc bien compris que substring-before ne le fait pas mais peut-etre il y a un autre moyen ? J'ai pas trouvé.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    tu peut jouer avec fn:replace() et remplacer tout ce qu'il y a apres le "." par du vide. Pas de bol, le "." est un caractere spécial dans les expressions regulieres, il faut donc le proteger avec un \

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fn:replace( "filename.ext" , "\..*", "")
    NB: J'ai pas testé le code, donc erreurs possibles...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut
    Je pense que c'est ce qu'il me faut mais à l'exécution de fn:replace j'ai l'erreur :
    Namespace 'http://www.w3.org/2005/xpath-functions' does not contain any functions

    Tu as une idée de ce que j'ai loupé ?

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Tu ne doit pas avoir un processeur XPath 2.0 (par exemple MsXML ??)
    Essaye d'utiliser la fonction sans le prefixe (fn), pour voir si ca passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    replace( "filename.ext" , "\..*", "")

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut
    Dans ce cas j'ai l'erreur : 'replace' is not a valid XSLT or XPath function (j'utilise JDOM)

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Oui, je viens de lire la doc de MsXML. Il est toujours en XPath 1.0

    Désolé, les seules fonctions dispo sont:
    • concat
    • contains
    • normalize-space
    • starts-with
    • string
    • string-length
    • substring
    • substring-after
    • substring-before
    • translate


    Donc il faut le faire a la main avec des contains/substring.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 60
    Points : 39
    Points
    39
    Par défaut
    En fait je n'utilise pas MsXML mais JDOM.

  10. #10
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par NicaeaCivitas
    En fait je n'utilise pas MsXML mais JDOM.
    Arf. oui, j'ai oublié qu'on etait dans le forum java. Mais JDOM n'est pas un parser, c'est une API qui utilise un parser. Ton parser ca doit etre Xalan ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 84
    Points : 46
    Points
    46
    Par défaut starts-with renvoie "Méthode inconnue"
    Bonjour à tous !

    Dans un fichier javascript, j'ai les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var oXmlRoot = new ActiveXObject("Msxml2.DOMDocument.4.0");
    oXmlRoot.loadXML('<data>
     + '<option value="">atest</option>'
     + '<option value="">btest</option>'
     + '<option value="">xtest</option></data>');
    var oOptions = oXml.XMLDocument.selectNodes("data/option[starts-with(.,'xt')]");
    Et j'ai une erreur qui me dit que la méthode "starts-with" est inconnue. Je teste sous IE 6 avec MSXML 4.0. Est ce que c normal ? Y a t'il un moyen pour le contourner ?

    Merci d'avance.

  12. #12
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    je crois qu'avec Microsoft il y a un une histoire de paramétrage mais je ne sais plus quoi . il faudrait chercher sur google

Discussions similaires

  1. Requête SQL qui ne renvoie rien quand la valeur est nulle
    Par vocal94130 dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/09/2010, 15h11
  2. COUNT afficher 0 quand la jointure ne renvoie rien
    Par -Neo- dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/10/2009, 19h30
  3. [XSLT] XSL ne renvoie rien !
    Par Frantz69 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 31/08/2009, 16h31
  4. [langage] xslt or not xslt ? quand s'en servir ?
    Par zax-tfh dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 13/12/2005, 13h27
  5. Doublons et fonction substring-before
    Par dalefou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/09/2005, 15h12

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