Mega Code Archive

 
Categories / ASP.Net Tutorial / XML
 

Optimizing XmlReader with a NameTable (VB)

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb"  Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">     <title>Untitled Page</title> </head> <body>     <form id="form1" runat="server">     <div>          </div>     </form> </body> </html> File: Default.aspx.vb Imports System.IO Imports System.Xml Imports System.Xml.Schema Partial Class _Default     Inherits System.Web.UI.Page     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _            Handles Me.Load         Dim bookcount As Integer = 0         Dim settings As New XmlReaderSettings()         Dim nt As New NameTable()         Dim book As Object = nt.Add("book")         settings.NameTable = nt         Dim booksSchemaFile As String = Path.Combine(Request.PhysicalApplicationPath, "Data.xsd")         settings.Schemas.Add(Nothing, XmlReader.Create(booksSchemaFile))         settings.ValidationType = ValidationType.Schema         settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings         AddHandler settings.ValidationEventHandler, AddressOf settings_ValidationEventHandler         settings.IgnoreWhitespace = True         settings.IgnoreComments = True         Dim booksFile As String = _             Path.Combine(Request.PhysicalApplicationPath, "Data.xml")         Using reader As XmlReader = XmlReader.Create(booksFile, settings)             While (reader.Read())                 If (reader.NodeType = XmlNodeType.Element _                     And book.Equals(reader.LocalName)) Then                     bookcount += 1                 End If             End While         End Using         Response.Write(String.Format("Found {0} books!", bookcount))     End Sub     Sub settings_ValidationEventHandler(ByVal sender As Object, _             ByVal e As System.Xml.Schema.ValidationEventArgs)         Response.Write(e.Message)     End Sub End Class File: Data.xml <?xml version='1.0'?> <bookstore xmlns="http://example.books.com"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">     <book genre="A"            publicationdate="1981"            ISBN="1-11111-11-0">         <title>title 1</title>         <author>             <first-name>A</first-name>             <last-name>B</last-name>         </author>         <price>8</price>     </book>     <book genre="B"            publicationdate="1999"            ISBN="0-222-22222-2">         <title>title 2</title>         <author>             <first-name>C</first-name>             <last-name>D</last-name>         </author>         <price>11.99</price>     </book> </bookstore> File: Data.xsd <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://example.books.com" xmlns="http://example.books.com" targetNamespace="http://example.books.com" elementFormDefault="qualified">   <xsd:element name="bookstore" type="bookstoreType" />   <xsd:complexType name="bookstoreType">     <xsd:sequence maxOccurs="unbounded">       <xsd:element name="book" type="bookType" />     </xsd:sequence>   </xsd:complexType>   <xsd:complexType name="bookType">     <xsd:sequence>       <xsd:element name="title" type="xsd:string" />       <xsd:element name="author" type="authorName" />       <xsd:element name="price" type="xsd:decimal" />     </xsd:sequence>     <xsd:attribute name="genre" type="xsd:string" />     <xsd:attribute name="publicationdate" type="xsd:string" />     <xsd:attribute name="ISBN" type="xsd:string" />   </xsd:complexType>   <xsd:complexType name="authorName">     <xsd:sequence>       <xsd:element name="first-name" type="xsd:string" />       <xsd:element name="last-name" type="xsd:string" />     </xsd:sequence>   </xsd:complexType> </xsd:schema>