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 :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 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())
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 :
Et je voudrais par exemple un tableau de toutes les règles avec comme colonnes uniquement val1 et val3.
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>
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.
Partager