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 :

[XSL] Comment générer un préfixe pour un namespace "inconnu"?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    GentooGeek
    Invité(e)
    Par défaut [XSL] Comment générer un préfixe pour un namespace "inconnu"?
    Bonjour.

    Je voudrais générer un fichier wsdl en utilisant une syntaxe XML plus simple. L'élément racine est <web-service targetNamespace="..."/> .

    L'attribut "targetNamespace" me pose un souci car je n'arrive pas à définir une XSL générique sans inclure l'espace de noms mentionné dans l'attribut targetNamespace du fichier XML. Je souhaiterais utiliser un préfixe dans l'XSL, tns, par exemple, pour cet espace de noms, de manière à ce que les valeurs d'attributs référencent correctement les types définis dans la section <schema> du WSDL généré.

    J'ai bien essayé le composant <xsl:element> mais il ne permet pas de définir le préfixe pour l'espace de noms (qui est d'office celui par défaut de l'élément qu'il crée). De plus, il ne permet pas d'ajouter des espaces de noms supplémentaires.

    Voici un exemple concret. Le fichier XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-service ... name="MyWebService" targetNamespace="urn:my:Web:Service">
    ...
    </web-service>
    Je voudrais une XSL donnant le résultat suivant:
    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
    <wsdl:definitions ...
    	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    	xmlns:xs="http://www.w3.org/2001/XMLSchema"
    	xmlns:tns="urn:my:Web:Service"
    	targetNamespace="urn:my:Web:Service">
    	<wsdl:types>
    		<xs:schema targetNamespace="urn:process-it:web-manager">
    		...
    		</xs:schema>
    	</wsdl:types>
    	...
    	<message name="myMessage".../>
    	...
    		<input message="tns:myMessage"/>
    	...
    </wsdl:definitions>
    Merci pour vos lumières.

  2. #2
    GentooGeek
    Invité(e)
    Par défaut
    Bon, ben j'ai trouvé tout seul: la réponse est, une fois de plus, XSLT2. Et non, je ne fais pas une fixation c'est la réalité! C'est impossible à faire avec XSLT version 1.0 si l'espace de noms ne fait pas partie des déclarations (xmlns="...") dans la feuille XSL.

    XSLT2 vient avec un nouvel élément: <xsl:namespace name="prefix" select="namespace"/>. Les valeurs prefix et namespace peuvent être calculées à partir du fichier XML analysé, d'où l'avantage. L'élément crée alors une déclaration d'espace de noms, avec ou sans préfixe.

    C'est utile lorsque
    • l'espace de noms inconnu doit être affecté à l'élément racine du résultat et si
    • l'élément racine porte plusieurs déclarations d'espaces de noms (cas fréquent).

    Dans les autres cas, on peut utiliser <xsl:element ...>, avec lequel on spécifie l'unique espace de noms affecté au nouvel élément. Mais dans ce cas il n'est pas possible d'ajouter des espaces de noms supplémentaires, qu'ils soient préfixés ou non.

Discussions similaires

  1. [Débutant] Comment générer mon projet pour qu'il tourne sur d'autres pc.
    Par Godzestla dans le forum C++Builder
    Réponses: 3
    Dernier message: 23/05/2011, 15h24
  2. Réponses: 9
    Dernier message: 30/01/2010, 23h38
  3. Réponses: 6
    Dernier message: 17/11/2008, 11h17
  4. Réponses: 9
    Dernier message: 09/02/2008, 20h00
  5. [XSL] Comment faire pour trier de cette façon ?
    Par shupa dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/06/2005, 17h39

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