XL 2013 petit problème de caractère a la création du xml

patricktoulon

XLDnaute Barbatruc
bonjour à tous
j'ai un petit soucis que je n'arrive pas a résoudre
a la création du xml (encodé en utf-8/utf-16) le caractère "&" se transforme en "&"
donc la chaine 
 se transforme en 

quelqu'un aurait une idée ?(pour garder "
")
VB:
Sub test()
Dim DocXml, balise, enfant, oCreation
Set DocXml = CreateObject("Microsoft.XMLDOM")    'creation
    Set balise = DocXml.appendchild(DocXml.createelement("balise"))
     balise.setAttribute "groupage", "do not"
    balise.setAttribute ("id"), "provix1"
    Set oCreation = DocXml.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"" standalone=""yes""")    'creation de l'entete du process
    DocXml.InsertBefore oCreation, DocXml.ChildNodes.Item(0)    'insertion parametre process


    Set enfant = DocXml.createelement("enfant"): enfant.setAttribute "commentaire", "juste un test 
 de commentaire": enfant.setAttribute ("id"), "provix2"

    balise.appendchild (enfant)
SaveFormatDocToFileXL DocXml, ThisWorkbook.Path & "\exoamp.xml"
End Sub
'enregistrer le xml  au format utf-8 et indenté
Public Sub SaveFormatDocToFileXL(ByVal doc, ByVal FileName As String)
    Dim rdrdom As Object, StreamFormaté As Object, wtrFormatted As Object

    Set rdrdom = CreateObject("MSXML2.SAXXMLReader.6.0")
    Set StreamFormaté = CreateObject("ADODB.Stream")
    Set wtrFormatted = CreateObject("MSXML2.MXXMLWriter")

    With StreamFormaté
        .Open
        .Type = 1    'adTypeBinary
        With wtrFormatted
            .omitXMLDeclaration = False
            .standalone = True
            .byteOrderMark = True    'If not set (even to False) then
            '.encoding is ignored.
            .Encoding = "UTF-8"    'Even if .byteOrderMark = True
            'UTF-8 never gets a BOM.
            .indent = True
            .output = StreamFormaté
            With rdrdom
                Set .contentHandler = wtrFormatted
                Set .dtdHandler = wtrFormatted
                Set .errorHandler = wtrFormatted
                .putProperty "http://xml.org/sax/properties/lexical-handler", wtrFormatted
                .putProperty "http://xml.org/sax/properties/declaration-handler", wtrFormatted
                .Parse doc
            End With
        End With
        If Dir(FileName) <> "" Then Kill FileName
    
        .SaveToFile FileName
        .Close
    End With
    Set rdrdom = Nothing
    Set StreamFormaté = Nothing
    Set wtrFormatted = Nothing
End Sub

je me casse la tête depuis hier avec ça 🤣🤣
 
Solution
alors en ecriture ca va impec par contre en relecture l'orsque je réouvrait le projet
le "&#13;" ressortait comme des saut de ligne donc à la re sauvegarde je perdait tout repère
car les saut de ligne dans le customui c'est chr(32)+ un caractère inconnu+chr(10) donc pour le reconvertir c’était compliqué
donc je met en creation un"|" a la place des sauts de ligne je sauve avec l'ancienne fonction le projet
et quand je crée le fichier excel avec le customUI.xml final je le crée avec la fonction précédemment citée
terminé plus de problème de conversion

patricktoulon

XLDnaute Barbatruc
bonjour robert
j'ai déjà un module similaire
c'est pas le probléme de conversion
le problème c'est que l'application qui le lit ensuite n'interprète pas &#13; mais bien &amp;#13;
c'est pour le customUI en fait pour les commentaire dans superTip
j'essaie en ce moment de changer l'utf-8 pour le iso-8x....
visiblement si l'entête de processing correspond le customui est fonctionnel
 

RyuAutodidacte

XLDnaute Impliqué
Supporter XLD
C'est une supposition, mais lors de la conversion de ton xml en utf8, cela convertit tes
"&" en"&amp; , donc si tu as moyen de les échapper le "&", la conversion te mettrai & et non &amp;
Pour la quasi des language qd on échappe on met une barre oblique inversé, ce qui donnerai :
\& … et là le & serait protégé lors de la conversion en utf8

EDIT : autre ex. : sur le terminal pour les lignes de commandes (je suppose que c'est similaire sur windows),
lorsque l'on écrit un chemin contenant des espaces on met des quote en début et en fin :
'monChemin…' ce qui évite les pb et d'effectuer la ligne de commande correctement car les espaces sont compris réellement comme des espaces
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
AHHHHH...
mais non cette méthode d'échappement ne peut fonctionner en XML
demo.gif
 

TooFatBoy

XLDnaute Barbatruc
où déjà dit ? car si c'est dans le module de Robert je ne l'ai pas ouvert
C'était juste après #1, mais comme ça a été ignoré, probablement car non compris comme on peut le voir en #5, du coup j'ai supprimé. ;)


mais non cette méthode d'échappement ne peut fonctionner en XML
T'es sûr que c'est en XML le pb ?

Autre question : t'es sûr que c'est &#13 qu'il te faut écrire ?
 
Dernière édition:

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin