2 pièce(s) jointe(s)
[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:
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:
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:
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.