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验证失败。

  • 相关阅读:
    安装补丁“此更新不适用于你的计算机”解决办法
    spanning-tree portfast什么意思?
    Win10离线安装.NET Framework 3.5的方法
    逐帧轮播图效果实现
    纯css实现同一页面下选择之后更换内容效果
    纯html+css中实现静态选座位效果技巧(input+label使用小技巧)
    js中实现杨辉三角
    用css实现html中单选框样式改变
    下划线hover下动态出现技巧
    CSS样式整理
  • 原文地址:https://www.cnblogs.com/millen/p/1393420.html
Copyright © 2011-2022 走看看