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][vb.net] : pb for-each, xmlnx ?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut [XSLT][vb.net] : pb for-each, xmlnx ?
    Bonjour,

    je n'arrive pas à transformer comme je voudrais un fichier xml, et particulièrement je n'arrive pas à récupérer les valeurs à l'intérieurs des balises.

    Pour expliquer le cheminement, je récupère un objet en vb.net.
    Je le sérialise en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                    Dim objXMLSerializer As XmlSerializer
                    Dim objStringWriter As StringWriter
                    Dim objXmlDocumentRU As XmlDocument
     
                    objXMLSerializer = New XmlSerializer(rulesRU.GetType)
                    objStringWriter = New StringWriter()
                    objXmlDocumentRU = New XmlDocument()
                    objXMLSerializer.Serialize(objStringWriter, rulesRU)
                    objXmlDocumentRU.LoadXml(objStringWriter.ToString())
    Ensuite, je le transforme en utilisant la fonction "GetTransformXSLTFile" (merci à son auteur) :
    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
    34
    35
    36
    37
    38
    39
     
        Public Function GetTransformXSLTFile(ByVal reader As XmlDocument, ByVal XSL_Filename As String, Optional ByVal Retour As String = "HTML") As Object
            'On charge le fichier XSL dans un XmlDocument
            Dim XSLTDocument As XmlDocument = New XmlDocument()
            XSLTDocument.Load(XSL_Filename)
     
            'Création du lecteur XML
            Dim XSLTDocumentReader As XmlNodeReader = New XmlNodeReader(reader)
     
            'Création du transformateur XSLT 
            Dim xslt As XslCompiledTransform = New XslCompiledTransform()
            xslt.Load(XSLTDocument, Nothing, Nothing)
     
            'là où sera enregistré la transformation
            Dim TransformOutput As StringBuilder = New StringBuilder()
     
            'paramètre d'écriture du fichier transformé
            Dim settings As XmlWriterSettings = New XmlWriterSettings()
     
            'paramètre un peu spécial, cf. msdn
            settings.ConformanceLevel = ConformanceLevel.Auto
     
            'xslt.OutputSettings correspond aux paramètres <xsl:output> dans votre fichier XSL
            'veillez à bien spécifier la sortie en html <xsl:output method="html" /> autrement
            'c'est "xml" par défaut et les balises vides (exemple <div></div>) seront transformées
            'en (</div>)
            Dim htmlDoc As XmlWriter = XmlWriter.Create(TransformOutput, xslt.OutputSettings)
            xslt.Transform(XSLTDocumentReader, Nothing, htmlDoc, New XmlUrlResolver())
     
            If Retour = "XML" Then
                'On charge le fichier XMLstring dans un XmlDocument
                Dim XmlDoc As XmlDocument = New XmlDocument()
                XmlDoc.InnerXml = TransformOutput.ToString()
                Return XmlDoc
            Else
                Return TransformOutput.ToString()
            End If
     
        End Function

    J'ai bien une chaine de caractère html en sortie mais qui ne correspond pas à ce que je souhaite.

    Mon xml a une forme du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <listeDeRegles>
      <regle>
        <val1></val1>
        <val2></val2>
        <val3></val3>
        <val4></val4>
        <val5></val5>
      </regle>
    </listeDeRegles>
    Et je voudrais par exemple un tableau de toutes les règles avec comme colonnes uniquement val1 et val3.

    J'ai vu des exemples pour faire cela et ca parait simple mais dans mon cas cela ne fonctionne pas. Je me demande si cela vient d'un problème en amont, un problème d'encoding (mon xmlDocument ressort en UTF-16), un problème de serialisation...

    Je pense également que cela peut venir des balises "xmlns" qui sont générées lors de la serialisation. Comment faire pour les enlever ? Faut-il les enlever en amont ou peut-on les "négliger" pendant le xslt ? (un peu comme un "exclude-result-prefixes")

    J'espère que qq1 aura une solution.
    Merci d'avance.

    En PJ le xml et xsl.
    Fichiers attachés Fichiers attachés
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  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 vous faut impérativement déclarer le namespace utilisé dans le XML source (xmlns="http://bean.persistence.ws.urgeo.sigec.com") et, comme vous générez du HTML, il faut dissocier en deux namespaces : par défaut pour HTML et, par exemple, xmlns:sigec pour rule et zoneCode.
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    Je ne comprends dans l'idée mais techniquement je ne vois pas bien.
    Je dois faire cela où ?

    Dans le xsl comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:sigec="http://bean.persistence.ws.urgeo.sigec.com" >
    (je dirais non car cela ne marche pas)

    Il faut faire d'autre chose dans le xsl ou bien est ce au moment de la sérialisation qu'il faut agire ?


    Merci
    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2003
    Messages : 281
    Points : 209
    Points
    209
    Par défaut
    en fait c'est bon, je viens de comprendre (merci Alain et merci les bouts de code sur le net).

    En plus de la déclaration de namaspace, il faut spécifier ensuite dans les template à quel namespace est rataché la balise. Du coup cela donne un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="sigec:zoneCode"/>
    Merci encore, je vais pouvoir avancer maintenant.

    S'il n'y a pas de solution, il n'y a pas de problème.
    Moi je dis ça, je dis rien.

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

Discussions similaires

  1. [XSLT] probleme position() plus for-each
    Par d4v1d dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 07/05/2007, 14h15
  2. Réponses: 5
    Dernier message: 27/03/2007, 18h39
  3. [VB.Net]_Boucle For each et button ?
    Par Gdal dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 18h20
  4. [XSLT] Number dans un for-each
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/08/2006, 13h40
  5. [XML][XSLT] Débutant {Probléme avec For-each-group}
    Par Silvia12 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/01/2006, 21h38

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