0

Я получаю данные с сервера, как UTF-8 закодированных сообщений XML, которые выглядят какXMLNS имен resilency

<?xml version="1.0" encoding="utf-8"?> 
<Data namespace="http://example.com/data"> 
... 
</Data> 

Заслуживает тут о примере в том, что «пространство имен» классификатор должен в действительности быть «XMLNS» квалификатор, определяющий пространство имен xml по умолчанию. Код для сериализации/десериализации был (автоматически) создан из файла определения схемы, и как xsd, так и документация, которая пришла вместе с ним, в значительной степени подтверждают, что это ошибка.

Однако это также означает, что объект данных в настоящее время живет в глобальных/пустом пространстве имен (XMLNS = «») и автоматически генерируемый код не с типичным "There is an error in XML document ..." и "<Data xmlns=''> was not expected." родом исключение того, что XmlSerialzier бросков во время десериализации, что люди видят когда пространства имен атрибутов десериализации/кода и XML-документа не совпадают.

Хотя довольно легко изменить автогенерированный код и «исправление» определения Namespace, например.

[System.SerializableAttribute()] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)] 
public partial class Data { 

, что я действительно хочу это имен resilency - то есть, если в какой-то момент в будущем проблема исправлена ​​ребятами, которые предоставляют мне данные, я не хочу быть вынуждены адаптировать Namespace в коде снова (любое изменение xmlns приведет к разрыву кода десериализации с вышеупомянутым исключением).

То есть, я хочу код, способный обрабатывать как неисправный xml, так и, например, код.

<?xml version="1.0" encoding="utf-8"?> 
<Data xmlns="http://example.com/data"> 
... 
</Data> 

или даже (например, если они решат идти "обратную совместимость")

<?xml version="1.0" encoding="utf-8"?> 
<Data xmlns="http://example.com/data" namespace="http://example.com/data"> 
... 
</Data> 

Какие варианты у меня есть?

+0

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

+0

Я использую C# и встроенный XmlSerializer. – MrCC

+0

Тогда, извините, я не специалист по этим инструментам. –

ответ

0

Вам дали «XML», который был большой. Вы могли бы использовать XML Transforms, чтобы исправить его до десериализации.

Смежные вопросы