2010-09-14 17 views
0

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> 

Répondre

1

Aurait creusé autour de sections locales un peu plus:

xmlBinaryDocument.removeAttribute "dt:dt" 
+0

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