ASP.NET Tutorial/XML/XMLTextReader
Содержание
Fill XML data into StringBuilder from XmlTextReader
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ReadXmlEfficient" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Untitled Page</title>
</head> <body>
<form id="form1" runat="server">
<asp:Literal id="XmlText" runat="server"></asp:Literal>
</form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; using System.Xml; public partial class ReadXmlEfficient : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { string xmlFile = Server.MapPath("Data.xml"); XmlTextReader reader = new XmlTextReader(xmlFile); StringBuilder str = new StringBuilder(); reader.ReadStartElement("DvdList"); while (reader.Read()) { if ((reader.Name == "DVD") && (reader.NodeType == XmlNodeType.Element)) { reader.ReadStartElement("DVD");str.Append("
- ");
str.Append(reader.ReadElementString("Title"));
str.Append("
- "); str.Append(reader.ReadElementString("Director")); str.Append("
- ");
str.Append(String.Format("{0:C}",Decimal.Parse(reader.ReadElementString("Price"))));
str.Append("
} } reader.Close(); XmlText.Text = str.ToString(); }
} File: Data.xml <?xml version="1.0"?> <DvdList>
<DVD ID="1" Category="Category 1"> <Title>title 1</Title> <Director>directory 2</Director> <Price>1</Price> <Starring> <Star>star 1</Star> <Star>star 2</Star> </Starring> </DVD> <DVD ID="2" Category="Category 2"> <Title>title 2</Title> <Director>directory 2</Director> <Price>2</Price> <Starring> <Star>star 3</Star> <Star>star 4</Star> </Starring> </DVD>
</DvdList></source>
Read xml and build page along with it
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ReadXML" %> <!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 id="Head1" runat="server">
<title>Loading a DataSet with XML</title>
</head> <body>
<form id="form1" runat="server">
Loading a DataSet with XML
Enter the filename or the URL for the XML to be loaded:
<asp:TextBox ID="txtXML" runat="server" Columns="60"/> <asp:Button ID="btnLoad" runat="server" Text="Load XML" OnClick="btnLoad_Click" /> <asp:Panel ID="panData" runat="server"> Below you will see a list ofGridView
controls, one for each of theDataTable
s generated from the XML <asp:PlaceHolder ID="phData" runat="server" /> </asp:Panel>
<asp:Label ID="labMsg" runat="server" CssClass="error"/>
</form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.IO; using System.Xml; public partial class ReadXML : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { panData.Visible = false; txtXML.Text = "Data.xml"; } } protected void btnLoad_Click(object sender, EventArgs e) { panData.Visible = true; string path = ""; labMsg.Text = ""; try { DataSet ds1 = new DataSet(); path = txtXML.Text; if (!path.StartsWith("http", StringComparison.CurrentCultureIgnoreCase)) path = Server.MapPath(path); XmlTextReader xtr = new XmlTextReader(path); ds1.ReadXml(xtr, XmlReadMode.InferSchema); foreach (DataTable table in ds1.Tables) { Literal caption = new Literal();caption.Text = "
Table: " + table.TableName + "
";phData.Controls.Add(caption); GridView grid = new GridView(); grid.CellPadding = 3; grid.DataSource = table.DefaultView; grid.DataBind(); phData.Controls.Add(grid); } } catch (IOException) { panData.Visible = false; labMsg.Text = txtXML.Text + " not found"; } catch { panData.Visible = false; labMsg.Text = path + " unable to be accessed"; } }
} File: Data.xml <?xml version="1.0" ?> <NavMenu title="GameSystems">
<MenuItem title="PC" icon="images/icon_4.gif" > <Games> <Game> <name>Game 1</name> <price>free</price> </Game> <Game> <name>Game 2</name> <price>14.99</price> </Game> </Games> </MenuItem> <MenuItem title="Mac" icon="images/icon_3.gif" > <Games> <Game> <name>Game 3</name> <price>49.99</price> </Game> </Games> </MenuItem>
</NavMenu></source>
Use XMLTextReader to read the data in an XML file (VB.net)
<source lang="csharp">
<%@ Page Language="VB" %> <%@ Import Namespace="System.Xml" %> <script runat=server>
sub Page_Load(Sender as Object, e as EventArgs) dim reader as XMLTextReader try reader = new XMLTextReader(Server.MapPath("Data.xml")) While reader.Read() Response.Write("" & reader.Name & " " & _ reader.Value & "
") End While catch ex as Exception Response.Write("Error accessing XML file") finally reader.close end try end sub
</script> <html><body> </body></html> File: Data.xml <?xml version="1.0"?> <bookstore>
<book genre="asdf"> <title>asdf</title> <author> <first-name>asdf</first-name> <last-name>asdf</last-name> </author> <price>asdf</price> </book> <book genre="asdf"> <title>asdf</title> <author> <first-name>asdf</first-name> <last-name>asdf</last-name> </author> <price>asdf</price> </book> <book genre="asdf"> <title>asdf</title> <author> <first-name>asdf</first-name> <last-name>asdf</last-name> </author> <price>asdf</price> </book>
</bookstore></source>