Je suis en train d'encoder un document à attacher en tant qu'élément encodé en base64 dans un document XML pour la transmission. C'est assez facile, je juste slurp le fichier entier dans un tableau d'octets, puis utiliser nodeTypedValue de MSXML à base64 coder les données comme je l'ai mis dans l'élément. Le problème, cependant, est que MS XML ajoute ensuite ses propres attributs d'espace de noms et de type de données dans l'élément, rendant la sortie xml échouée à la validation. Le code que j'utilise est ci-dessous ainsi que la sortie. Comment supprimer les attributs "xmlns: dt =" urn: schemas-microsoft-com: datatypes "dt: dt =" bin.base64 "" ajoutés à l'élément?Comment empêcher MSXML d'ajouter ses propres espaces de noms à mon document codé en base64 XML?
Private Function xmlBinaryDocument(filePath As String) As IXMLDOMElement
Dim xmlDOM As MSXML2.DOMDocument60
Set xmlDOM = New MSXML2.DOMDocument60
Set xmlBinaryDocument = xmlDOM.createNode(NODE_ELEMENT, "document", NS)
Dim strExtension As String
Dim strMimeType As String
Dim fso As FileSystemObject
Set fso = New FileSystemObject
' Info about file
strExtension = fso.GetExtensionName(filePath)
strMimeType = extToMime(strExtension)
' Now read the file as binary data into a byte array
Dim file() As Byte
file = GetFileBytes(filePath)
' Store it in the xml element as a base64 datatype
xmlBinaryDocument.dataType = "bin.base64"
xmlBinaryDocument.nodeTypedValue = file
' attributes
xmlBinaryDocument.setAttribute "document_content_type", strMimeType
xmlBinaryDocument.setAttribute "document_encoding_type", "base64"
xmlBinaryDocument.setAttribute "document_extension", strExtension
End Function
Sortie:
<document xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64"
document_content_type="application/rtf" document_encoding_type="base64"
document_extension="rtf">***base64 encoded file here***</document>
Cela ne fonctionne pas, les bibliothèques XML insistent sur l'ajout de cet attribut, si vous le demandez ou pas. Si vous le supprimez volontairement, il ignore la demande. – Owl