ASP.Net/XML/DOM
Traversing the DOM Tree
<source lang="csharp">
<%@ Page Language="C#" %> <%@ Import Namespace="System.Xml" %> <script runat="server">
void Page_Load(object sender, EventArgs e) { string xmlPath = MapPath("Books.xml"); XmlDocument doc = new XmlDocument(); //doc.Load(xmlPath); doc.LoadXml("<employees>" + "<employee id="1">" + "<name><firstName>First Name</firstName>" + "<lastName>Last Name</lastName>" + "</name><city>City</city>" + "<state>WA</state><zipCode>99999</zipCode>" + "</employee></employees>"); XmlNode rootNode = doc.DocumentElement; DisplayNodes(rootNode); } void DisplayNodes(XmlNode node) { //Print the node type, node name and node value of the node if (node.NodeType == XmlNodeType.Text) { Response.Write("Type= [" + node.NodeType+ "] Value=" + node.Value + "
"); } else { Response.Write("Type= [" + node.NodeType+"] Name=" + node.Name + "
"); } //Print attributes of the node if (node.Attributes != null) { XmlAttributeCollection attrs = node.Attributes; foreach (XmlAttribute attr in attrs) { Response.Write("Attribute Name =" + attr.Name+ "Attribute Value =" + attr.Value); } } //Print individual children of the node XmlNodeList children = node.ChildNodes; foreach (XmlNode child in children) { DisplayNodes(child); } }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Traversing the DOM Tree</title>
</head> <body>
<form id="form1" runat="server">
</form>
</body> </html>
</source>
Use XML Document (DOM) to select one Node
<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("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.
" + 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>DOM Validation</title>
</head> <body>
<form id="form1" runat="server">
</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> --%>
</source>