Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 关于读取xml文件的困惑_Asp.net_Linq_Listview - Fatal编程技术网

Asp.net 关于读取xml文件的困惑

Asp.net 关于读取xml文件的困惑,asp.net,linq,listview,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"), }; for

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

没有示例XML很难预测,但我注意到您缺少“Root”元素,基于此,下一个要导航的项目是“Root:


如果这不是答案,请分享您的XML示例,这将帮助我们提供更好的答案。

代码的第一部分看起来不错。您不需要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>

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


希望有帮助!

首先更改代码,因为您将名称和电话分配给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);
}
您收到了什么错误?
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);
}