我正在尝试从我的xml文件中检索一些数据到listview。我有点困惑。这就是我到目前为止。如何做到。谢谢提前
XDocument doc=XDocument.Load(Server.MapPath("PhoneBook.xml"));
var q = from c in doc.Descendants("Persons") select new
{
name=c.Element("Name"),
phone=c.Element("Phone"),
};
foreach (var item in q)
{
var lvi = new ListViewItem(item.name);
}
答案 0 :(得分:0)
如果没有示例XML很难预测,但我注意到你错过了“Root”元素,并且基于下一个要导航的项目是“Root:
中的元素”XDocument doc=XDocument.Load(Server.MapPath("PhoneBook.xml"));
var items = (from item in doc.Root.Elements("Persons")
select new {
name=c.Element("Name"),
phone=c.Element("Phone"),
};
如果这不是答案,请分享您的XML样本,这将有助于我们提供更好的答案。
答案 1 :(得分:0)
您的代码的第一部分看起来不错。你不需要foreach循环。以下是您的代码的外观:
XDocument doc = XDocument.Load(Server.MapPath("PhoneBook.xml"));
var q = from c in doc.Descendants("Persons")
select new
{
name = c.Element("Name"),
phone = c.Element("Phone"),
};
ListView1.DataSource = q;
ListView1.DataBind();
在标记中,您可以使用名称或电话绑定任何模板字段。您的ListView可能如下所示:
<asp:ListView runat="server" ID="ListView1">
<LayoutTemplate>
<table runat="server" id="table1">
<tr runat="server" id="itemPlaceholder">
</tr>
</table>
</LayoutTemplate>
<ItemTemplate>
<tr id="Tr1" runat="server">
<td id="Td1" runat="server">
<asp:Label ID="NameLabel" runat="server"
Text='<%#Eval("Name") %>' />
</td>
<td id="Td2" runat="server">
<asp:Label ID="PhoneLabel" runat="server"
Text='<%#Eval("Phone") %>' />
</td>
</tr>
</ItemTemplate>
</asp:ListView>
这种布局将产生这种类型的输出:
希望它有所帮助!
答案 2 :(得分:0)
首先更改您的代码,因为您将名称和电话分配给XElement,而不是元素值:
var q = from c in doc.Descendants("Persons")
select new {
name=c.Element("Name").Value,
phone=c.Element("Phone").Value
};
然后试试这段代码:
listView1.View = View.Details;
listView1.Columns.Add("Person Name", 200, HorizontalAlignment.Left);
listView1.Columns.Add("Phone Number", 100, HorizontalAlignment.Left);
foreach (var item in q)
{
ListViewItem listItem = new ListViewItem();
listItem.Text = item.Name;
listItem.SubItems.Add(item.Phone);
listView1.Items.Add(listItem);
}