在 ASP.NET Web Forms 應用程式中,常需從 XML 文件讀取資料並繫結至伺服器控制項。本文示範如何使用 XmlDocument 載入 XML、透過 GetElementsByTagName 擷取特定節點,並將資料填入 ListBox 控制項,最後處理使用者的選取事件。
<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Xml" %>
<html>
<head>
<script language="C#" runat="server">
private void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
ArrayList values = new ArrayList(); // 作為資料來源
XmlDocument doc = new XmlDocument(); // 表示 XML 文件
doc.Load(Server.MapPath("people.xml"));
// 取得所有名為 "name" 的子代元素集合
XmlNodeList elemList = doc.GetElementsByTagName("name");
for (int i = 0; i < elemList.Count; i++)
{
values.Add(elemList[i].InnerXml);
}
ListBox1.DataSource = values;
ListBox1.DataBind();
}
}
// 取得被選取項目的文字
private void SubmitBtn_Click(Object sender, EventArgs e)
{
if (ListBox1.SelectedIndex > -1)
{
Label1.Text = "Selected Option: " + ListBox1.SelectedItem.Text + "<p>";
}
}
</script>
</head>
<body>
<form runat="server">
<h3>Data Binding ListBox</h3>
<asp:Label id="Label1" font-name="Verdana" font-size="10pt" runat="server"/>
<asp:ListBox id="ListBox1" SelectionMode="Single" Rows="1" runat="server"/>
<asp:Button id="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
</form>
</body>
</html>
XmlDocument.Load 讀取伺服器對應路徑下的 people.xml。GetElementsByTagName("name") 回傳符合名稱的 XmlNodeList,此處僅針對 <name> 節點。InnerXml 加入 ArrayList,再指派給 ListBox.DataSource 並呼叫 DataBind()。SelectedIndex,若有選取項目則顯示其文字內容。<name> 元素。ArrayList 為非泛型集合,現代開發建議改用 List<string>。XmlNamespaceManager 配合 XPath 查詢。