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