zoukankan      html  css  js  c++  java
  • XML校验之三

    目前,如果将数据保存在XmlDocument对象中,那么惟一可以执行的验证类型是载入期(load-time)验证。可以通过将诸如XmlReader对象的验证读取器对象传入Load方法中来实现。但是,如果您做了任何修改,那就无法保证数据依然符合当初的模式了。通过使用XmlNodeReader类读取保存在XmlNode对象中的数据,就可以将XmlNodeReader传入Create方法来验证DOM对象了。程序清单5-5显示了一个如何完成这项工作的示例。

    程序清单5-5  执行XML DOM验证

    <%@ Page Language="C#"%>

    <%@ Import Namespace="System.Xml" %>

    <%@ Import Namespace="System.Xml.Schema" %>

    <script runat="server">

      private StringBuilder _builder = new StringBuilder();

      void Page_Load(object sender, EventArgs e)

      {

        string xmlPath = Request.PhysicalApplicationPath +

          @""App_Data"Authors.xml";   

        string xsdPath = Request.PhysicalApplicationPath +

          @""App_Data"Authors.xsd";

        XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.Load(xmlPath);

        XmlElement authorElement = (XmlElement)

        xmlDoc.DocumentElement.SelectSingleNode

          ("//authors/author[au_id='172-32-1176']");

        authorElement.SetAttribute("test", "test");

        XmlNodeReader nodeReader = new XmlNodeReader(xmlDoc);

        XmlReader reader = null;       

        XmlReaderSettings settings = new XmlReaderSettings();

        settings.ValidationEventHandler += new

          ValidationEventHandler(this.ValidationEventHandler);

        settings.ValidationType = ValidationType.Schema;       

        settings.Schemas.Add(null, XmlReader.Create(xsdPath));

        reader = XmlReader.Create(nodeReader, settings);

        while (reader.Read())

        {           

        }

        if (_builder.ToString() == String.Empty)

          Response.Write("Validation completed successfully.");

        else

          Response.Write("Validation Failed. <br>" + _builder.ToString());

        }

        void ValidationEventHandler(object sender, ValidationEventArgs args)

        {       

          _builder.Append("Validation error: " + args.Message + "<br>");               

        }   

    </script>

    <html xmlns="http://www.w3.org/1999/xhtml" >

    <head runat="server">

        <title>DOM Validation</title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>               

        </div>

        </form>

    </body>

    </html>

    程序清单5-5演示了由XmlDocument对象(Authors.xml文档加载)返回的XmlNodeReader对象如何在读取的时候将XML模式验证支持放置在顶部。

    在将XmlDocument对象读入XmlNodeReader对象之前,Authors.xml文件被载入XmlDocument中并通过添加名为“test”的属性而对其进行修改。

    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(xmlPath);

    XmlElement authorElement = (XmlElement)

    xmlDoc.DocumentElement.SelectSingleNode

      ("//authors/author[au_id='172-32-1176']");

    authorElement.SetAttribute("test", "test");

    然后将XML文档传入XmlNodeReader,再将该对象传入工厂化创建的(factory created)XmlReader对象。

    reader = XmlReader.Create(nodeReader, settings);

    当验证读取器分析文件的时候,它会验证文件中的任何修改。因为XmlDocument对象中添加了一个无效的属性,XSD模式将会失败并且您将会看到与图5-2类似的输出。

      5-2

    正如在图5-2中所看到的,因为修改后的XML数据不符合XSD模式,所以XML验证失败。

  • 相关阅读:
    【解决办法】移动硬盘在电脑上显示“本地磁盘”并且出现打不开的情况
    在Windows上搭建Python环境
    Thymeleaf模板的使用
    thymeleaf中的th:remove用法
    AngularJS PhoneCat代码分析
    AngularJS PhoneCat代码分析
    利用java反射调用类的的私有方法--转
    Java Reflection (JAVA反射) --转载
    Eclipse 常用快捷键 (动画讲解)--转载
    三大JavaScript框架对比——AngularJS、BackboneJS和EmberJS
  • 原文地址:https://www.cnblogs.com/millen/p/1393420.html
Copyright © 2011-2022 走看看