Domanda

Sto usando una variante sul codice visto in "Come rendere XMLDOMDocument includono la Dichiarazione XML? " (che può anche essere visto all'indirizzo MSDN . Se cambio la codifica "UTF-16", uno potrebbe pensare che sarebbe uscita come UTF-16 ... e "fa" ... cercando in uscita in un editor di testo,. ma il check in un editor esadecimale, il marchio di byte-ordine manca (nonostante la proprietà di essere impostata su true), e editor XML rifiutare il documento come non valido UTF-16, per la distinta mancante

Che cosa sono io che domina?

'' # 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

L'output appare come:

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<doc><one>test1</one><two>test2</two></doc>

Perché sto utilizzando VB6? In realtà è in VBA (stessa generazione, senza sottoinsieme di VB6), usato come scripting lingua di EMC Captiva InputAccel / FormWare, quindi la commutazione non è un'opzione.

È stato utile?

Soluzione

Il problema è che quando si recuperano un valore dalla proprietà di output dello scrittore si otterrà una stringa. Dal momento che le stringhe in VB sono sempre UTF-16 è ciò che si ottiene indipendentemente dalla codifica. Dal momento che le stringhe sono sempre UTF-16 in VB non v'è alcuna nozione di loro necessitano di una distinta base in modo che non è incluso sia.

La proprietà della distinta di codifica e riguardano solo come lo scrittore scriverà l'XML quando un'implementazione del IStream è assegnato per la proprietà di output.

Prova si modifica il codice in giro la chiamata per analizzare come segue: -

Dim oStream As ADODB.Stream
Set oStream =  New ADODB.Stream
oStream.Open
oStream.Type = adTypeBinary

wrt.output = oStream

rdr.parse xmlDoc

oStream.SaveToFile App.Path + "\saved.xml"
oStream.Close

Questo dovrebbe generare l'output desiderato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top