新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → 如何验证接收到的XML是否匹配指定的XSD,我找了三天三夜了,好像没有人知道??? 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 70558 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 如何验证接收到的XML是否匹配指定的XSD,我找了三天三夜了,好像没有人知道??? 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     tony_1201 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:83
      门派:XML.ORG.CN
      注册:2006/11/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给tony_1201发送一个短消息 把tony_1201加入好友 查看tony_1201的个人资料 搜索tony_1201在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看tony_1201的博客21
    发贴心情 

    你把XML里随便删除一个元素,还是验证通过的,我刚试过了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/11/21 11:26:00
     
     tony_1201 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:83
      门派:XML.ORG.CN
      注册:2006/11/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给tony_1201发送一个短消息 把tony_1201加入好友 查看tony_1201的个人资料 搜索tony_1201在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看tony_1201的博客22
    发贴心情 
    这位兄弟,可以给个QQ号吗,我们QQ交流一下
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/11/21 11:28:00
     
     frankdou 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:3
      积分:68
      门派:XML.ORG.CN
      注册:2006/11/10

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给frankdou发送一个短消息 把frankdou加入好友 查看frankdou的个人资料 搜索frankdou在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看frankdou的博客23
    发贴心情 
    我用QQ不方便,如果有msn加 neu_frank@hotmail.com。我最近才学schema,有空交流一下。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/11/21 11:36:00
     
     dandanyidian 美女呀,离线,快来找我吧!巨蟹座1986-7-6
      
      
      等级:大一(高数修炼中)
      文章:25
      积分:161
      门派:XML.ORG.CN
      注册:2007/11/3

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给dandanyidian发送一个短消息 把dandanyidian加入好友 查看dandanyidian的个人资料 搜索dandanyidian在『 DTD/XML Schema 』的所有贴子 点击这里发送电邮给dandanyidian 引用回复这个贴子 回复这个贴子 查看dandanyidian的博客24
    发贴心情 
    没懂什么意思!

    ----------------------------------------------
    只想过自由自在的生活!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/11/3 16:01:00
     
     juventang 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:2
      积分:58
      门派:XML.ORG.CN
      注册:2008/8/26

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给juventang发送一个短消息 把juventang加入好友 查看juventang的个人资料 搜索juventang在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看juventang的博客25
    发贴心情 
    /// 阅读器的原理是检查一个文档是否是格式良好的,以及检查文档是否与架构吻合。
    /// 如果带验证的阅读器发现一个有严重的格式错误的XML文档,只会触发XmlException异常,它不会触发其它的事件。

    下面的方法用于验证XML文档是否符合架构

    /// <summary>
        /// Use XML schema to validate XML documents
        /// </summary>
        /// <param name="doc">需要验证的文档</param>
        /// <param name="schemaUrl">schema地址</param>
        /// <returns>是否通过验证</returns>
        public bool ValidateXmlWithSchema(XmlDocument doc, string schemaUrl)
        {

            XmlReaderSettings booksSettings = new XmlReaderSettings();
            //服务器上发布schema,然后调用schema验证传递给服务器的XML
            booksSettings.Schemas.Add("", "http://192.168.1.65/Services/books.xsd");
            booksSettings.ValidationType = ValidationType.Schema;
            //在验证过程中出现任何错误,都会触发ValidationEventHandler事件
            booksSettings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);


            StringBuilder strSql = new StringBuilder();
            strSql.Append("select * from book");


            DataSet ds = new DataSet();

            ds = ClsDb.Retrieve(CommandType.Text, strSql.ToString(), "book");


            XmlDocument doc = new XmlDocument();

            //过滤掉不需要的节点<NewDataSet>
            doc.LoadXml(ds.GetXml().Replace("<NewDataSet>", "").Replace("</NewDataSet>", ""));

            //获取XML的stream
            StringReader stream = null;
            stream = new StringReader(doc.OuterXml);
            //创建XmlReader
            XmlReader books = XmlReader.Create(stream, booksSettings);
            failed = false;
            try
            {
                //流式读取,并验证,验证错误会触发上面注册的事件
                //验证发生在用户用Read方法向前移动指针时,
                //一旦节点被分析和读取,它获得传送过来的处理验证的内部的对象。
                //验证操作是基于节点类型及被要求的验证类型。
                //它确认节点所有的属性和节点包含的子节点是否符合验证条件
                while (books.Read())
                {
                    if (failed == true)
                    {
                        return false;
                    }
                }
                
            }
            catch (XmlException err)
            {
                failed = true;
            }
            finally
            {
                //一定要记得关闭XmlReader,不然会造成独占
                books.Close();
            }
            return !failed;

            ////////////////////////////////////


        }

    //如果未提供事件ValidationEventHandler事件处理程序,则抛出一个XML异常
        private void ValidationEventHandler(object sender, ValidationEventArgs args)
        {
            failed = true;
            //记录不符合的验证信息
            InvalidateMeg = "Validation error: " + args.Message;
        }

    客户端使用:
    提供XML文档和schema 地址 验证所提供的XML文档是否符合架构要求
    日过不符合,会提示哪里有错误,操作终止。
    try
            {

                if (!vxml.ValidateXmlWithSchema(doc, "schema url"))
                //if (!vxml.ValidateSetXmlWithSchemaUrl())
                {
                    TextBox1.Text = vxml.InvalidateMeg;
                    return;
                }
                else
                {
                    TextBox1.Text =”successful”;
                }

            }
            catch(Exception ex)
            {
                TextBox1.Text = ex.Message;

            }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/9/24 18:12:00
     
     xujian2009 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:8
      积分:82
      门派:XML.ORG.CN
      注册:2009/12/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xujian2009发送一个短消息 把xujian2009加入好友 查看xujian2009的个人资料 搜索xujian2009在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xujian2009的博客26
    发贴心情 
    写的很详细,有时间能交流交流吗?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/12/14 15:18:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/3/28 10:33:44

    本主题贴数25,分页: [1] [2] [3]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    109.375ms