关于阅读xml文件的困惑

时间:2013-12-25 16:11:52

标签: asp.net linq listview

我正在尝试从我的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);
}

3 个答案:

答案 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>

这种布局将产生这种类型的输出:

enter image description here

希望它有所帮助!

答案 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);
}