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 :

Problème transformation xml en Objet via xslt


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut Problème transformation xml en Objet via xslt
    Bonjour,

    J'ai un soucis de manipulation XSLT.

    L'idée du traitement est de transformer une requête Xml en entrée en un Objet via une déserialisation le tout en y appliquant une transformation via un fichier xsl.

    Voici un exemple de requête en entrée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?xml version="1.0" encoding="UTF-8"?>
    <ast:GetCoverage ....>
    	<ast:CoverageParameters>
    		<ast:MinimumCoverageRate uom="purcentageaa">test</ast:MinimumCoverageRate>
    Mon objet est quand à lui composé par exemple des deux attributs suivants

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    [Serializable]
        [DataContract]
     
        [XmlRootAttribute(ElementName="Request")]
        public class RequestInfo
        {
            #region Attribute
     
            private RequestMethodEnum method;
     
            [XmlAttribute("method")]
            public RequestMethodEnum Method
            {
                get { return method; }
                set { method = value; }
            }
     
            private string testGetValue;
     
            [XmlAttribute("testGetValue")]
            public string TestGetValue
            {
                get { return testGetValue; }
                set { testGetValue = value; }
            }
     
            #endregion
     
        }
    Voici l'allure de mon 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <xsl:template match="/*">
        <xsl:choose>
          <!-- define here all accepted methods, with their namespace. Subsequently, define associated template -->
          <xsl:when test="name() = 'wfs:GetFeature'">
            <xsl:call-template name="GetFeature"/>
          </xsl:when>
          <xsl:when test="local-name() = 'GetStereoscopicRatio'">
            <xsl:call-template name="GetStereoscopicRatio"/>
          </xsl:when>
          <xsl:when test="name() = 'ast:GetCoverage'">
            <xsl:call-template name="GetCoverage"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:message terminate="yes">
              $ERROR$UnknownMethod$Unknown method : '<xsl:value-of select="name()"/>'
            </xsl:message>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
     
    <xsl:template name="GetCoverage">  
    	<Request>
    	     <xsl:attribute name="method">
              <!-- method element is mandatory -->
              <xsl:value-of select="local-name()"/>
             </xsl:attribute>    
     
     	<xsl:attribute name="testGetValue">
    		<xsl:value-of select="ast:CoverageParameters/ast:MinimumCoverageRate/text()"/>
    	</xsl:attribute>			
    	</Request>	
      </xsl:template>
    Je précise que je me base sur un existant qui fonctionne tres bien. Le problème ne vient pas de ma deserialisation car si je rentre directement une valeur au lieu d'utiliser un select ça fonctionne.

    En fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="ast:CoverageParameters/ast:MinimumCoverageRate/text()"/>
    semble retourner un champ vide.

    Hors dans le traitement d'un autre Template (GetFeature()) on procède de la sorte.

    J'ai également essayé plusieurs syntaxe comme:
    /ast:CoverageParameters/ast:MinimumCoverageRate/text()
    ast:GetCoverage/ast:CoverageParameters/ast:MinimumCoverageRate/text()
    /ast:GetCoverage/ast:CoverageParameters/ast:MinimumCoverageRate/text()

    Quelqu'un aurait-il une idée ou pourrait m'aiguiller? j'ai beau lire des tutos ou de'étudier l'existant je ne vois ce que je fais de difféérent ou mal...

    Cordialement,
    Christophe

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Hello,

    il faudrait malheureusement plus de détails, concernant les cas qui marchaient bien, et l'entièreté du cas qui ne marche pas.

    Par exemple on aurait besoin de vérifier que tout a bien été déclaré et pas avoir des ... à la place.
    Ce qui ne veut pas dire qu'il faut absolument copier/coller tout ton code de production. Idéalement, il faudrait que tu t'arranges pour avoir un cas qui marche comme avant, plus ton cas qui ne marche pas, et tout ça dans un code très court, le plus court possible, et nous montrer ça en entier. Quand un informaticien cherche des solutions, c'est comme ça qu'il les trouve.

    ... Mais voilà ce que je soupçonne :


    C'est à propos des ast: dans ton select. Tu m'as tout l'air de ne pas savoir ce que c'est, et donc de ne pas les avoir déclarés correctement.
    Ce sont des préfixes qui indiquent le namespace des éléments à sélectionner. Les namespaces doivent être les bons, et donc les préfixes doivent avoir été déclarés, et correctement.

    Dans ton XML d'origine, il y a sûrement au début quelque chose comme xmlns:ast="machin://bidule/chouette". C'est la déclaration du namespace dans le XML d'origine.
    Il faut exactement la même déclaration dans ton XSLT.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2012
    Messages : 90
    Points : 60
    Points
    60
    Par défaut
    Bonjour et merci pour cette réponse rapide. Vous avez bien identifié le problème et maintenant cela fonctionne correctement.

    Merci beaucoup et bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. xml vers html via xslt
    Par julien.63 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/10/2007, 10h16
  2. Transformer XML en PDF par XSLT
    Par abda1000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/06/2007, 17h10
  3. Réponses: 4
    Dernier message: 12/12/2006, 10h22
  4. [XSLT] Problème de transformation XML avec un fichier xslt
    Par seb35 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 24/04/2006, 22h02
  5. Transformation xml + xsl -> HTML via PHP
    Par petit-ourson dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/10/2003, 22h42

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