J'utilise une variante sur le code vu dans "How to make XMLDOMDocument include the XML Declaration?" (qui peut également être vu à MSDN.) Si je change l'encodage en "UTF-16" on pourrait penser qu'il serait sortie en UTF-16 ... et "fait" ... en regardant la sortie dans un éditeur de texte, mais en la vérifiant dans un éditeur hexadécimal, la marque de l'ordre des octets est manquante (bien que la propriété ait la valeur true) , et les éditeurs XML rejettent le document comme non valide UTF-16, pour laMSXMLWriter60 ne sort pas byteOrderMark pour l'encodage UTF-16
BOM manquantQu'est-ce que je méconnais
'' # Create and load a DOMDocument object.
Dim xmlDoc As New DOMDocument60
xmlDoc.loadXML("<doc><one>test1</one><two>test2</two></doc>")
'' # Set properties on the XML writer - including BOM, XML declaration and encoding
Dim wrt As New MXXMLWriter60
wrt.byteOrderMark = True
wrt.omitXMLDeclaration = False
wrt.encoding = "UTF-16"
wrt.indent = False
'' # Set the XML writer to the SAX content handler.
Dim rdr As New SAXXMLReader60
Set rdr.contentHandler = wrt
Set rdr.dtdHandler = wrt
Set rdr.errorHandler = wrt
rdr.putProperty "http://xml.org/sax/properties/lexical-handler", wrt
rdr.putProperty "http://xml.org/sax/properties/declaration-handler", wrt
'' # Now pass the DOM through the SAX handler, and it will call the writer
rdr.parse xmlDoc
'' # Let the writer do its thing
Dim iFileNo As Integer
iFileNo = FreeFile
Open App.Path + "\saved.xml" For Output As #iFileNo
Print #iFileNo, wrt.output
Close #iFileNo
la sortie ressemble à:.?
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<doc><one>test1</one><two>test2</two></doc>
Pourquoi suis-je utiliser VB6? C'est en fait dans VBA (même génération, léger sous-ensemble de VB6), utilisé comme langage de script pour InputAccel/FormWare d'EMC-Captiva, donc la commutation n'est pas une option.
Confirmé, j'ai obtenu le même résultat d'une autre manière. Il est important de définir la propriété de sortie * first *, avant les autres propriétés ou vous n'obtiendrez toujours pas la nomenclature. –
@nobugz: Oui, une bonne capture, l'assignation à la propriété de sortie doit avoir lieu avant d'assigner les autres propriétés. – AnthonyWJones
"oStream.Type = adTypeBinary" dans mon VBA, mais cela a fait l'affaire. Merci! –