ASP.NET Tutorial/XML/Schema Validation
XML document validation against XML schema
<source lang="csharp">
<%@ Page Language="C#" %> <%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Xml.Schema" %> <script runat="server">
private XmlTextReader reader; private XmlValidatingReader validator; void Page_Load(Object Sender, EventArgs e) { try { reader = new XmlTextReader(Server.MapPath("Data.xml")); validator = new XmlValidatingReader(reader); validator.ValidationType = ValidationType.XDR; validator.ValidationEventHandler += new ValidationEventHandler(this.ShowError); while (validator.Read()) { } } catch (Exception ex) { Response.Write("Error accessing XML file"); } finally { reader.Close(); } } void ShowError(Object Sender, ValidationEventArgs e) { Response.Write("" + e.Message + "
"); if (reader.LineNumber > 0) { Response.Write("Line: " + reader.LineNumber + " Position: " + reader.LinePosition + ""); } }
</script> <html><body> </body></html> File: Data.xml <bookstore xmlns="x-schema:Data.xdr">
<book genre="novel" style="hardcover"> <title>title 1</title> <price>1.5</price> <author> <first-name>M</first-name> <last-name>A</last-name> </author> </book>
</bookstore> File: Data.xdr <?xml version="1.0"?> <Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="first-name" content="textOnly"/> <ElementType name="last-name" content="textOnly"/> <ElementType name="name" content="textOnly"/> <ElementType name="price" content="textOnly" dt:type="fixed.14.4"/> <ElementType name="author" content="eltOnly" order="one"> <group order="seq"> <element type="name"/> </group> <group order="seq"> <element type="first-name"/> <element type="last-name"/> </group> </ElementType> <ElementType name="title" content="textOnly"/> <AttributeType name="genre" dt:type="string"/> <AttributeType name="style" dt:type="enumeration" dt:values="paperback hardcover"/> <ElementType name="book" content="eltOnly"> <attribute type="genre" required="yes"/> <attribute type="style" required="yes"/> <element type="title"/> <element type="price"/> <element type="author"/> </ElementType> <ElementType name="bookstore" content="eltOnly"> <element type="book"/> </ElementType>
</Schema></source>
XML validation
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="XmlValidation" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Xml Validation</title>
</head> <body>
<form id="form1" runat="server">
<asp:RadioButton id="optValid" runat="server" Text="Use Data.xml" Checked="True" GroupName="Valid"> </asp:RadioButton> <asp:button id="cmdValidate" runat="server" Text="Validate XML" OnClick="cmdValidate_Click"> </asp:button>
<asp:Label id="lblStatus" runat="server" EnableViewState="False"></asp:Label>
</form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Xml.Schema; using System.IO; using System.Xml; public partial class XmlValidation : System.Web.UI.Page {
protected void cmdValidate_Click(object sender, EventArgs e) { string filePath = "Data.xml"; lblStatus.Text = ""; XmlReaderSettings settings = new XmlReaderSettings(); settings.Schemas.Add("yourURI",Request.PhysicalApplicationPath + "Data.xsd"); settings.ValidationType = ValidationType.Schema; settings.ValidationEventHandler += new ValidationEventHandler(ValidateHandler); FileStream fs = new FileStream(filePath, FileMode.Open); XmlReader r = XmlReader.Create(fs, settings); while (r.Read()) { } fs.Close(); lblStatus.Text += "
Complete."; } public void ValidateHandler(Object sender, ValidationEventArgs e) { lblStatus.Text += "Error: " + e.Message + "
"; }
} File: Data.xml
<?xml version="1.0" standalone="yes"?> <SuperProProductList xmlns="yourURI" >
<Product ID="1" Name="Chair"> <Price>49.33</Price> </Product> <Product ID="2" Name="Car"> <Price>43398.55</Price> </Product> <Product ID="3" Name="Fresh Fruit Basket"> <Price>49.99</Price> </Product>
</SuperProProductList> File: Data.xsd <?xml version="1.0"?> <xs:schema
targetNamespace="yourURI" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" > <xs:element name="SuperProProductList"> <xs:complexType> <xs:sequence maxOccurs="unbounded"> <xs:element name="Product"> <xs:complexType> <xs:sequence> <xs:element name="Price" minOccurs="1" type="xs:double" /> </xs:sequence> <xs:attribute name="ID" use="required" type="xs:int" /> <xs:attribute name="Name" use="required" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
</xs:schema></source>