Итак, у меня есть XML, который я не могу изменить, и он выглядит примерно так:
<?xml version="1.0" encoding="UTF-8"?>
<ns6:Responses xmlns:ns6="http://www.yadayada" xmlns:ns2="http://www.yadayada" xmlns:ns3="http://www.w3.org/2000/09/xmldsig#" xmlns:ns4="http://www.yadayada" xmlns:ns5="http://www.yadayada">
<MessageReference>824cf96b-6130-460c-a2d4-2adc3b6ea14d</MessageReference>
</ns6:Responses>
Я использую XSD, созданный вручную, с аннотациями SQL, и соответствующая часть выглядит так:
<xs:element name="Responses" msdata:Prefix="ns6" sql:relation="Responses">
<xs:complexType>
<xs:sequence>
<xs:element name="MessageReference" type="xs:string" msdata:Prefix="ns6" sql:field="MessageReference" />
</xs:sequence>
</xs:complexType>
</xs:element>
Когда я проталкиваю это через утилиту SQLXMLBULKLOAD, она не выдает ошибку, но в моей базе данных ничего не заканчивается.
Я могу заставить это работать, если я выполню одно из следующих действий:
- удалить пространство имен
ns6:
из <ns6:Responses
в XML и удалить msdata:Prefix="ns6"
из XSD;
- добавить
ns6
к MessageReference
в XML, то есть сделать это <ns6:MessageReference>
.
Я предполагаю, что обработка ожидает, что элементы в ns6:Responses
также будут иметь префикс ns6
, но их нет в моем XML, и я не могу это изменить.
Я попробовал следующее, но это не сработало:
- добавлено
msdata:Prefix=""
к элементу MessageReference
в XSD;
- полностью удалил
msdata:Prefix="ns6"
из XSD;
- перемешивали пространства имен разными способами.
Проблема в том, что я могу изменить XSD, но я не могу изменить XML. Таким образом, два моих рабочих решения не годятся для меня, поскольку оба они включают изменения в XML.
Я знаю, что могу предварительно обработать XML, либо удалив пространство имен ns6:
, либо добавив его ко всем элементам, но я хотел попытаться избежать этого.