ASP.Net/XML/Validate XML

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Use XML Document (DOM) to validate XML against XML schema

<%@ Page Language="C#"%>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Schema" %>
<script runat="server">    
    private StringBuilder stringBuilder = new StringBuilder();
    void Page_Load(object sender, EventArgs e)
    {
        string xmlPath = MapPath("Authors.xml");    
        string xsdPath = MapPath("Authors.xsd");
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(xmlPath);
        XmlElement authorElement = (XmlElement) xmlDoc.DocumentElement.SelectSingleNode("//authors/author[authorID="000-00-0001"]");
        authorElement.SetAttribute("nfex", "nfex");
        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 (stringBuilder.ToString() == String.Empty)
            Response.Write("Validation completed successfully.");
        else
            Response.Write("Validation Failed. <br>" + stringBuilder.ToString());
    }
    void ValidationEventHandler(object sender, ValidationEventArgs args)
    {        
        stringBuilder.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>

<%-- File: Authors.xml
<?xml version="1.0"?>
<authors>
  <author>
    <authorID>000-00-0001</authorID>
    <lastName>Nancy</lastName>
    <firstName>Lee</firstName>
    <phone>999 999-9999</phone>
    <address>9999 York St.</address>
    <city>Regina</city>
    <state>LA</state>
    <zip>99999</zip>
    <contract>true</contract>
  </author>
  <author>
    <authorID>000-00-0002</authorID>
    <lastName>First</lastName>
    <firstName>Last</firstName>
    <phone>415 986-7020</phone>
    <address>No Name St.</address>
    <city>Vancouver</city>
    <state>BC</state>
    <zip>88888</zip>
    <contract>true</contract>
  </author> 
</authors>
--%>

<%-- File: Authors.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="authors">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="author">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="authorID" type="xs:string" />
              <xs:element name="lastName" type="xs:string" />
              <xs:element name="firstName" type="xs:string" />
              <xs:element name="phone" type="xs:string" />
              <xs:element name="address" type="xs:string" />
              <xs:element name="city" type="xs:string" />
              <xs:element name="state" type="xs:string" />
              <xs:element name="zip" type="xs:unsignedInt" />
              <xs:element name="contract" type="xs:boolean" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
--%>



Validate XML against XML schema

<%@ Page Language="C#"%>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Schema" %>
<script runat="server">    
    private StringBuilder stringBuilder = new StringBuilder();
    void Page_Load(object sender, EventArgs e)
    {
        string xmlPath = MapPath("Authors.xml");    
        string xsdPath = MapPath("Authors.xsd");
        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(xmlPath, settings);
        while (reader.Read()) 
        {            
        }
        if (stringBuilder.ToString() == String.Empty)
            Response.Write("Validation completed successfully.");
        else
            Response.Write("Validation Failed. <br>" + stringBuilder.ToString());
    }
    void ValidationEventHandler(object sender, ValidationEventArgs args)
    {        
        stringBuilder.Append("Validation error: " + args.Message + "<br>");                
    }    
  
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>XSD Validation</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>                
    </div>
    </form>
</body>
</html>
<%-- File: Authors.xml
<?xml version="1.0"?>
<authors>
  <author>
    <authorID>000-00-0001</authorID>
    <lastName>Nancy</lastName>
    <firstName>Lee</firstName>
    <phone>999 999-9999</phone>
    <address>9999 York St.</address>
    <city>Regina</city>
    <state>LA</state>
    <zip>99999</zip>
    <contract>true</contract>
  </author>
  <author>
    <authorID>000-00-0002</authorID>
    <lastName>First</lastName>
    <firstName>Last</firstName>
    <phone>415 986-7020</phone>
    <address>No Name St.</address>
    <city>Vancouver</city>
    <state>BC</state>
    <zip>88888</zip>
    <contract>true</contract>
  </author> 
</authors>
--%>

<%-- File: Authors.xsd
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="authors">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="author">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="authorID" type="xs:string" />
              <xs:element name="lastName" type="xs:string" />
              <xs:element name="firstName" type="xs:string" />
              <xs:element name="phone" type="xs:string" />
              <xs:element name="address" type="xs:string" />
              <xs:element name="city" type="xs:string" />
              <xs:element name="state" type="xs:string" />
              <xs:element name="zip" type="xs:unsignedInt" />
              <xs:element name="contract" type="xs:boolean" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
--%>



XML data validation

<%@ Page Language="C#"%>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Xml.Schema" %>
<script runat="server">    
    private StringBuilder stringBuilder = new StringBuilder();
    void Page_Load(object sender, EventArgs e)
    {
        string xmlPath = MapPath("Authors.xml");    
        string xsdPath = MapPath("Authors.xsd");
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        settings.Schemas.Add(null, XmlReader.Create(xsdPath));
        
        XmlReader reader = XmlReader.Create(xmlPath, settings);          
        XmlDocument doc = new XmlDocument();          
        doc.Load(reader);
        ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
        
        doc.Validate(eventHandler);        
        if (stringBuilder.ToString() == String.Empty)
            Response.Write("Validation completed successfully.");
        else
            Response.Write("Validation Failed. <br>" + stringBuilder.ToString());
    }
    void ValidationEventHandler(object sender, ValidationEventArgs args)
    {        
        stringBuilder.Append("Validation error: " + args.Message + "<br>");                
    }    
  
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>XSD Validation</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>                
    </div>
    </form>
</body>
</html>