Как запретить MSXML добавлять свои собственные пространства имен в мой XML-документ, закодированный в base64?

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

Как подавить добавление к элементу атрибутов "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>

person Oesor    schedule 14.09.2010    source источник


Ответы (1)


Надо было еще немного покопаться в Locals:

xmlBinaryDocument.removeAttribute "dt:dt"
person Oesor    schedule 14.09.2010
comment
Это не работает, XML-библиотеки настаивают на добавлении этого атрибута, независимо от того, просите вы об этом или нет. Если вы намеренно удаляете, он игнорирует запрос. - person Owl; 17.05.2017