簡體   English   中英

如何使用C#XmlSerializer驗證不包含xmlns =…的xml?

[英]How to validate xml, not containing xmlns=…, with c# XmlSerializer?

我正在使用基於dtd的Mismo 2.3.1模式。 我將dtd轉換為xsd,然后生成了C#代碼以序列化/反序列化xml文檔的對象表示形式。

給定有效的mismo 2.3.1 xml文檔,我可以反序列化到生成的C#類中。

我有一些代碼可以將XmlSerializer與XmlReaderSettings和XmlSchmeas集合一起使用,以讀取轉換后的xsd。

如果我將xmlns =“ http:// mySchema ...”放在根元素中,並嘗試驗證有意無效的xml,並且按預期方式工作,則我的驗證事件將被准確地描述。

如果我刪除xmlns屬性,則會得到“找不到元素[我的根元素]的架構信息”

關於如何驗證沒有xmlns規范的xml的任何想法嗎? 有什么設置要告訴序列化程序“遇到此元素時使用此架構”?

提前致謝!

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM