ASP.Net/XML/Schema — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 14:51, 26 мая 2010
Create XML Schema
<source lang="csharp">
<%@ Page Language="C#"%> <%@ Import Namespace="System.IO" %> <%@ 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 ns = "http://www.w3.org/2001/XMLSchema"; string xsdPath = MapPath("NewAuthors.xsd"); XmlSchema schema = new XmlSchema(); XmlSchemaElement authorID = new XmlSchemaElement(); authorID.Name = "authorID"; authorID.SchemaTypeName = new XmlQualifiedName("string", ns ); XmlSchemaElement authorLastName = new XmlSchemaElement(); authorLastName.Name = "lastName"; authorLastName.SchemaTypeName = new XmlQualifiedName("string", ns); XmlSchemaElement authorFirstName = new XmlSchemaElement(); authorFirstName.Name = "firstName"; authorFirstName.SchemaTypeName = new XmlQualifiedName("string", ns); XmlSchemaElement zip = new XmlSchemaElement(); zip.Name = "zip"; zip.SchemaTypeName = new XmlQualifiedName("unsignedInt", ns); XmlSchemaElement contract = new XmlSchemaElement(); contract.Name = "contract"; contract.SchemaTypeName = new XmlQualifiedName("boolean", ns); XmlSchemaElement authorElement = new XmlSchemaElement(); authorElement.Name = "author"; // Create an anonymous complex type for the author element XmlSchemaComplexType authorType = new XmlSchemaComplexType(); XmlSchemaSequence authorSeq = new XmlSchemaSequence(); //Add all the child elements to the sequence authorSeq.Items.Add(authorID); authorSeq.Items.Add(authorLastName); authorSeq.Items.Add(authorFirstName); authorSeq.Items.Add(zip); authorSeq.Items.Add(contract); authorType.Particle = authorSeq; //Set the SchemaType of authors element to the complex type authorElement.SchemaType = authorType; //Add the root authors element to the schema schema.Items.Add(authorElement); //Compile the file to check for validation errors schema.rupile(new ValidationEventHandler(ValidationEventHandler)); FileStream stream = new FileStream(xsdPath, FileMode.Create); //Write the file schema.Write(stream); stream.Close(); if (stringBuilder.ToString() == String.Empty) Response.Write("File written successfully"); else Response.Write("Schema Creation Failed.
" + stringBuilder.ToString()); } void ValidationEventHandler(object sender, ValidationEventArgs args) { stringBuilder.Append("Validation error: " + args.Message + "
"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Writing XSD Schema</title>
</head> <body>
<form id="form1" runat="server">
</form>
</body> </html>
</source>
Read XML Schema and compile
<source lang="csharp">
<%@ Page Language="C#"%> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Reflection" %> <%@ 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 xsdPath = MapPath("Authors.xsd"); XmlSchema schema = null; FileStream stream = new FileStream(xsdPath, FileMode.Open); schema = XmlSchema.Read(stream, new ValidationEventHandler(ValidationEventHandler)); stream.Close(); schema.rupile(new ValidationEventHandler(ValidationEventHandler)); if (schema.IsCompiled) DisplaySchemaObjects(schema); else Response.Write("Schema Reading Failed.
" + stringBuilder.ToString()); } void DisplaySchemaObjects(XmlSchema schema) { foreach (XmlSchemaElement elem in schema.Elements.Values) { if (elem.ElementSchemaType is XmlSchemaComplexType) { Response.Write("Complex Element: " + elem.Name + "
"); XmlSchemaComplexType ct = (XmlSchemaComplexType)elem.ElementSchemaType; //Process the XmlSchemaComplexType } } } void ValidationEventHandler(object sender, ValidationEventArgs args) { stringBuilder.Append("Validation error: " + args.Message + "
"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Reading XSD Schema</title>
</head> <body>
<form id="form1" runat="server">
</form>
</body> </html>
<%-- 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> --%>
</source>
Validate XML with inline Schema
<source lang="csharp">
<%@ 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("AuthorsWithInlineSchema.xml"); XmlReader reader = null; XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler); //settings.ValidationFlags &= ~XmlSchemaValidationFlags.IgnoreInlineSchema; //settings.ValidationFlags &= ~XmlSchemaValidationFlags.IgnoreValidationWarnings; settings.ValidationFlags &= XmlSchemaValidationFlags.ProcessInlineSchema; settings.ValidationFlags &= XmlSchemaValidationFlags.ReportValidationWarnings; reader = XmlReader.Create(xmlPath, settings); while (reader.Read()) { } if (stringBuilder.ToString() == String.Empty) Response.Write("Validation completed successfully."); else Response.Write("Validation Failed.
" + stringBuilder.ToString()); } void ValidationEventHandler(object sender, ValidationEventArgs args) { if (args.Severity == XmlSeverityType.Error) { stringBuilder.Append("Validation error: " + args.Message + "
"); } }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Inline XSD Schema Validation</title>
</head> <body>
<form id="form1" runat="server">
</form>
</body> </html>
<%-- <?xml version="1.0"?> <root xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:x="urn:authors">
<xs:schema targetNamespace="urn:authors"> <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> <x: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> </x:authors>
</root>
--%>
</source>