如何将XML绑定到ASP中的页面?

时间:2014-11-05 02:29:53

标签: c# asp.net xml

我有一些像这样的XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <People>
      <Person id="1">
        <Name>
          <FirstName>Manoj</FirstName>
          <LastName>Syamala</LastName>
        </Name>
      </Person>
      <Person id="2">
        <Name>
          <FirstName>Anthony</FirstName>
          <LastName>Roberts</LastName>
        </Name>
      </Person>
   </People>

我希望能够在C#ASPX页面上显示它。 最好的方法是什么? 我想在一个页面上显示Person ID = 1,然后按下一个按钮,然后将Person替换为ID = 2 TreeNodeBinding。我已经研究了使用ASP进行XML绑定的基础知识,但是没有多少工作经过{{1}}(这不是我需要的)。

感谢。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。但是,我建议您使用DataGrid进行分页。将XML作为DataSource。等待示例代码。

好的,这是代码。

在您的aspx页面中,像这样创建一个GridView。请注意,此GridView具有TemplateField,因此您可以使用HTML表格格式化数据。

 <asp:GridView ID="gvPeople" AllowPaging="True" runat="server" 
            AutoGenerateColumns="False" PageSize="1" 
            onpageindexchanging="gvPeople_PageIndexChanging">
        <Columns>
            <asp:TemplateField>                
                <HeaderTemplate>
                    <table border="0">
                        <tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <td>Name: </td><td><%# Eval("Name.FullName") %></td>
                </ItemTemplate>
                <FooterTemplate>
                    </tr>
                  </table>
                </FooterTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

您的代码应该如下所示

using System;
using System.IO;
using System.Web.UI.WebControls;
using System.Xml.Serialization;

namespace ReadXMLData
{
    public partial class ShowPeople : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LoadDataFromXML();
            }
        }

        private void LoadDataFromXML()
        {
            // Loads XML data from an external XML file
            XmlSerializer deserializer = new XmlSerializer(typeof(People));
            TextReader textReader = new StreamReader(@"D:\Temp\People.xml");

            People PeopleList = new People();
            PeopleList = (People)deserializer.Deserialize(textReader);
            textReader.Close();

            gvPeople.DataSource = PeopleList;
            gvPeople.DataBind();
        }

        protected void gvPeople_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            // GridView paging 
            gvPeople.PageIndex = e.NewPageIndex;
            LoadDataFromXML();
        }
    }
}

并且,以下是用于创建保存XML数据的对象的支持类。

using System;
using System.Collections.Generic;

namespace ReadXMLData
{
    [Serializable]
    [System.Xml.Serialization.XmlRoot("People")]
    public class People : List<Person>
    {
    }

    [Serializable]
    public class Person
    {
        public Name Name { get; set; }

        public Person()
        {
            this.Name = new Name();
        }
    }

    [Serializable]
    public class Name
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string FullName
        {
            get
            {
                return this.FirstName + " " + this.LastName;
            }
        }

        public Name()
        {
            this.FirstName = string.Empty;
            this.LastName = string.Empty;
        }
    }
}

希望这有帮助。