XML校正之三

來源:互聯網
上載者:User

目前,如果將資料儲存在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驗證失敗。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.