2013-09-26 3 views
0

Я работаю с Mismo 2.3.1, основанной на dtd схеме. Я преобразовал dtd в xsd, а затем сгенерировал код C# для сериализации/десериализации объектов представления документа xml.Как проверить xml, не содержащий xmlns = ..., с C# XmlSerializer?

Учитывая допустимый mismo 2.3.1 xml doc, я могу десериализовать свой сгенерированный класс C#.

У меня есть код для работы с XmlSerializer вместе с XmlReaderSettings и XmlSchmeas, который читается в моем преобразованном xsd.

Если я помещаю xmlns = "http: // mySchema ..." в корневой элемент и пытаюсь проверить намеренно недействительный xml, работает, как и ожидалось, мое событие проверки получает pinged с точным описанием.

Если я вынимаю на XMLNS атрибут, то я получаю «не может найти сведения о схеме элемента [мой корневой элемент]»

Любая идея о том, как проверить XML, что приходит в без спецификации Xmlns? Любые настройки, чтобы сказать сериализатору «использовать эту схему, когда вы сталкиваетесь с этим элементом»?

Заранее благодарен!

ответ

0
static void Main() { 
    var settings = new XmlReaderSettings(); 
    settings.NameTable = new NameTable(); 

    var nsMgr = new XmlNamespaceManager(settings.NameTable); 
    nsMgr.AddNamespace("", "http://example.com/2013/ns"); // <-- set default namespace 

    settings.ValidationType = ValidationType.Schema; 
    settings.Schemas.Add(null, @"C:\XSDSchema.xsd"); // <-- set schema location for the default namespace 

    var parserCtx = new XmlParserContext(settings.NameTable, nsMgr, XmlSpace.Default); 

    using (var reader = XmlReader.Create(@"C:\file.xml", settings, parserCtx)) { 
     var serializer = new XmlSerializer(typeof(Foo)); 
     Foo f = (Foo)serializer.Deserialize(reader); 
    } 
} 
Смежные вопросы