加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用xmlschemaset和xmlreader.create对xsd模式验证xml

发布时间:2020-12-16 01:44:30 所属栏目:百科 来源:网络整理
导读:我在我的程序中修复警告,显然xmlvalidating reader和xmlschemacollection已经过时了.问题是,我不太确定如何.这是尝试使用涉及xmlschemaset和xmlreader.create的新模板“模仿”先前的验证函数.我首先声明一个模式,然后使用targeturi字符串设置它,然后在设置验
我在我的程序中修复警告,显然xmlvalidating reader和xmlschemacollection已经过时了.问题是,我不太确定如何.这是尝试使用涉及xmlschemaset和xmlreader.create的新模板“模仿”先前的验证函数.我首先声明一个模式,然后使用targeturi字符串设置它,然后在设置验证事件处理程序时将其添加到模式集.我认为我的问题是设置读者和输入流.我知道如何使用xmlvalidating reader,但如果我想修复这些警告,那么这不是一个选项.这是代码和尝试.在测试期间,只使用了新的验证xml代码,旧的代码被注释掉了.

// New Validation Xml.
            string xsd_file = filename.Substring(0,filename.Length - 3) + "xsd";
            XmlSchema xsd = new XmlSchema();
            xsd.SourceUri = xsd_file;

            XmlSchemaSet ss = new XmlSchemaSet();
            ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
            ss.Add(xsd);
            if (ss.Count > 0)
            {
                XmlTextReader r = new XmlTextReader(filename2);
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                settings.Schemas.Add(ss);
                settings.ValidationEventHandler +=new ValidationEventHandler(ValidationCallBack);
                XmlReader reader = XmlReader.Create(filename2,settings);
                while (reader.Read())
                {
                }
                reader.Close();
            }

            // Old Validate XML
            XmlSchemaCollection sc = new XmlSchemaCollection();
            sc.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
            sc.Add(null,xsd_file);
            if (sc.Count > 0)
            {
                XmlTextReader r = new XmlTextReader(filename2);
                XmlValidatingReader v = new XmlValidatingReader(r);
                v.ValidationType = ValidationType.Schema;
                v.Schemas.Add(sc);
                v.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
                while (v.Read())
                {
                }
                v.Close();
            }

    private void ValidationCallBack(object sender,ValidationEventArgs e)
    {
        // If Document Validation Fails
        isvalid = false;
        MessageConsole.Text = "INVALID. Check message and datagridview table.";
        richTextBox1.Text = "The document is invalid: " + e.Message;
    }

不幸的是,当我运行程序并尝试验证无效的xml文档时,它会给出一个如下错误:“未声明’URNLookup’元素.” URNLookup元素是xml文件的根元素.我总是可以回到旧的验证方法,但那些警告吓到了我.

任何帮助都非常感谢.先感谢您!如果我遗漏任何信息,我会很乐意提供更多信息.

> tf.rz(.NET 3.5 SP1,Visual Studio C#2008)

解决方法

我已经解决了这个问题,它现在又重新开始工作而没有任何警告.
在新验证XML中:

// New Validation Xml.
            string xsd_file = filename.Substring(0,filename.Length - 3) + "xsd";
            XmlSchema xsd = new XmlSchema();
            xsd.SourceUri = xsd_file;

            XmlSchemaSet ss = new XmlSchemaSet();
            ss.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
            ss.Add(null,xsd_file);
            if (ss.Count > 0)
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                settings.Schemas.Add(ss);
                settings.Schemas.Compile();
                settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
                XmlTextReader r = new XmlTextReader(filename2);
                using (XmlReader reader = XmlReader.Create(r,settings))
                {
                    while (reader.Read())
                    {
                    }
                }
            }

ss.add已更改为具有命名空间和文件字符串.添加了settings.schemas.compile(),并添加了“using(xmlreader reader … …”)的无关紧要的重组.

这页帮助了我很多:http://msdn.microsoft.com/en-us/library/fe6y1sfe(v=vs.80).aspx它现在有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读