2010-09-14 1 views
0

Я кодирую документ для прикрепления в качестве кодированного элемента base64 внутри XML-документа для передачи. Это достаточно просто, я просто разбиваю весь файл на массив байтов, а затем использую узел nodeTypedValue MSXML для base64, кодируя данные, когда я помещаю их в элемент. Проблема, однако, заключается в том, что MS XML затем добавляет в элемент свои собственные пространства имен и атрибуты типа данных, что делает проверку вывода ошибки xml. Код, который я использую, ниже, а также вывод.Как заставить MSXML добавлять собственные пространства имен в мой XML-документ, закодированный в base64?

Как подавить атрибуты "xmlns: dt =" urn: schemas-microsoft-com: datatypes "dt: dt =" bin.base64 ", добавляемые к элементу?

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 

Выход:

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

ответ

1

Если бы порылся в Locals немного больше:

xmlBinaryDocument.removeAttribute "dt:dt" 
+0

Это не работает, библиотеки XML настаивают на добавлении этого атрибута, спросить, есть ли у вас для него или нет. Если вы намеренно удалите его, он игнорирует запрос. – Owl