Mega Code Archive

 
Categories / ASP.Net Tutorial / XML
 

Reading author instances from an XmlReader using XmlSerialization (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 Imports System.Xml.Serialization 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 factory As New XmlSerializerFactory         Dim settings As New XmlReaderSettings()         Dim nt As New NameTable()         Dim book As Object = nt.Add("book")         Dim price As Object = nt.Add("price")         Dim author As Object = nt.Add("author")         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 author.Equals(reader.LocalName)) Then                     Dim xs As XmlSerializer = factory.CreateSerializer(GetType(Author))                     Dim a As Author = CType(xs.Deserialize(reader.ReadSubtree), Author)                     Response.Write(String.Format("Author: {1}, {0}<BR/>", _                         a.FirstName, a.LastName))                 End If             End While         End Using     End Sub     Sub settings_ValidationEventHandler(ByVal sender As Object, _             ByVal e As System.Xml.Schema.ValidationEventArgs)         Response.Write(e.Message)     End Sub End Class <XmlRoot(ElementName:="author", _ Namespace:="http://example.books.com")> Public Class Author     <XmlElement(ElementName:="first-name")> Public FirstName As String     <XmlElement(ElementName:="last-name")> Public LastName As String 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>