ASP.NET Tutorial/XML/XMLTextReader

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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 of GridView controls, one for each of the DataTables 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>