在网络上看到很多朋友在求datalist或是repeater控件绑定xml数据源的例子,在这里整理了一下,以datalist为便写了一个DEMO.
有xml文档:

<?xml version="1.0" encoding="utf-8" ?>

<music>
  <Entry>
    <Title> 千里之外   -   周杰伦 </Title>
    <Ref   href="http://www.lzpcc.com.cn/268316.wma"   />
  </Entry>
  <Entry>
    <Title> 听妈妈的话   -   周杰伦 </Title>
    <Ref   href="http://wma.1ting.com/wmam/2.wma"   />
  </Entry>
</music>

页面代码:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Xml"%>  
<%@ Import Namespace="System.Xml.XPath"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    private XmlDocument doc = new XmlDocument();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            bind();

}
    }
    protected void bind()
    {
        //XmlDocument doc = new XmlDocument();
        doc.Load(Server.MapPath("x1.xml"));
        XmlNodeList nodes = doc.SelectNodes("music/Entry");
        DataList1.DataSource = nodes;
        DataList1.DataBind();
    }

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        switch(e.CommandName)
        {
            case "edit":
                DataList1.EditItemIndex = e.Item.ItemIndex;
                bind(); break;
            case "cancel":
                DataList1.EditItemIndex = -1;
                bind(); break;
            case "dele":
                doc.Load(Server.MapPath("x1.xml"));
                XmlNode node=doc.SelectSingleNode("/music/Entry/Ref[@href='"+e.CommandArgument+"']");
                node.ParentNode.ParentNode.RemoveChild(node.ParentNode);

doc.Save(Server.MapPath("x1.xml"));
                bind(); break;
            case "update":
                doc.Load(Server.MapPath("x1.xml"));
                XmlNode xnode = doc.SelectSingleNode("/music/Entry/Ref[@href='" + e.CommandArgument + "']");
                XmlElement elem1 = xnode as XmlElement;
                elem1.SetAttribute("href", ((TextBox)e.Item.FindControl("tb2")).Text);
                doc.Save(Server.MapPath("x1.xml"));
                DataList1.EditItemIndex = -1;
                bind(); break;

}
        
        
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>datalist绑定xml</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DataList ID="DataList1" EnableViewState="true"  runat="server" OnItemCommand="DataList1_ItemCommand" >
        <HeaderTemplate>
        <table>
        <tr>
            <td>歌曲名称</td>
            <td>歌曲地址</td>
            <td>操作</td>
        
        </tr>
        
        </HeaderTemplate>
        
        <ItemTemplate>
        
        <tr>
        <td><%#((XmlNode)Container.DataItem)["Title"].InnerText%> </td>
        <td><%#((XmlNode)Container.DataItem)["Ref"].GetAttribute("href").ToString()%> </td>
        <td>
        <asp:LinkButton ID="ltn1" Text="编辑" runat="server" CommandName="edit" CommandArgument='<%#((XmlNode)Container.DataItem)["Ref"].GetAttribute("href").ToString()%>'></asp:LinkButton>
        <asp:LinkButton Text="删除" ID="ltn2" runat="server" CommandName="dele" CommandArgument='<%#((XmlNode)Container.DataItem)["Ref"].GetAttribute("href").ToString()%>'></asp:LinkButton>
        
        </td>
        </tr>
        </ItemTemplate>
        <EditItemTemplate>
        <tr>
        <td><asp:TextBox ID="tb1" runat="server" Text='<%#((XmlNode)Container.DataItem)["Title"].InnerText%>'></asp:TextBox></td>
        <td><asp:TextBox ID="tb2" runat="server" Text='<%#((XmlNode)Container.DataItem)["Ref"].GetAttribute("href").ToString()%>'></asp:TextBox></td>
        <td>
        <asp:LinkButton ID="ltn3" runat="server" CommandArgument='<%#((XmlNode)Container.DataItem)["Ref"].GetAttribute("href").ToString()%>' CommandName="update">保存</asp:LinkButton>
        <asp:LinkButton ID="ltn4" runat="server" CommandName="cancel">取消</asp:LinkButton></td>
        </tr>
        
    </EditItemTemplate>
        <FooterTemplate>
        </table>
        </FooterTemplate>
        </asp:DataList>
    </div>
    </form>
</body>
</html>

功能实现,现在来说下原理
我们在把sql server数据绑定到datalist时,实际是绑定的一个记录集,而把xml数据绑定到datalist也是一样,只不过它不是记录集,而是一个节点集.

doc.Load(Server.MapPath("x1.xml"));
        XmlNodeList nodes = doc.SelectNodes("music/Entry");
        DataList1.DataSource = nodes;
        DataList1.DataBind();

声明好绑定的节点集以后,我们在前台还要想写相应的前台绑定模板列

<td><%#((XmlNode)Container.DataItem)["Title"].InnerText%> </td>
<td><%#((XmlNode)Container.DataItem)["Ref"].GetAttribute("href").ToString()%> </td>

我们在前台就提到,我们的datalist绑定的为一个节点集,所以我们需要把Container.DataItem转换为一个XmlNode,我们是分别想绑定其title节点值,和Ref的href属性值所以其上面分别表达为以上两种形式.

其实只绑定好了,其删除和修改功能就显得相对简单了,在绑定sql 数据源是分别为删除和修改记录,而在这里就分别是删除和修改节点.

switch(e.CommandName)
        {
            case "edit":
                DataList1.EditItemIndex = e.Item.ItemIndex;
                bind(); break;
            case "cancel":
                DataList1.EditItemIndex = -1;
                bind(); break;
            case "dele":
                doc.Load(Server.MapPath("x1.xml"));
                XmlNode node=doc.SelectSingleNode("/music/Entry/Ref[@href='"+e.CommandArgument+"']");
                node.ParentNode.ParentNode.RemoveChild(node.ParentNode);

doc.Save(Server.MapPath("x1.xml"));
                bind(); break;
            case "update":
                doc.Load(Server.MapPath("x1.xml"));
                XmlNode xnode = doc.SelectSingleNode("/music/Entry/Ref[@href='" + e.CommandArgument + "']");
                XmlElement elem1 = xnode as XmlElement;
                elem1.SetAttribute("href", ((TextBox)e.Item.FindControl("tb2")).Text);
                doc.Save(Server.MapPath("x1.xml"));
                DataList1.EditItemIndex = -1;
                bind(); break;
        }

其主要过程就是查找节点,删除/修改节点或是属性值.
我们通过XPath表达式来查询节点.因为考虑到其src为唯一值,所以把其值作为参数,在前面绑定时我们已经指定了CommandArgument.所以我们的XPath表达式记为"/music/Entry/Ref[@href='" + e.CommandArgument + "']"
含义为选择href属性为 e.CommandArgument 的Ref节点.不过在删除节点时,我们想要删除的是整个Entry节点
所以我们需要以这种方式表示:node.ParentNode.ParentNode.RemoveChild(node.ParentNode);

修改完成以后,则保存文件,重新绑定数据.
整操作完成.

转载于:https://www.cnblogs.com/symbol441/archive/2007/12/13/993650.html

DataList绑定xml数据,并实现删除和修改相关推荐

  1. 如何对SQL Server中的XML数据进行insert、update、delete .

    SQL Server 2005/2008增加了对XML数据的支持,同时也新增了几种操作XML的方法,本文主要以SQL Server 2008为例介绍如何对XML数据进行insert.update.de ...

  2. oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...

    大家好,今日继续给大家讲解VBA数据库解决方案的第21讲,如何利用VBA代码在已有的数据表中删除,添加,修改字段.这个内容是操作数据库的一项必修的内容,还望大家在实际工作中多利用,所以这节的知识,对于 ...

  3. 为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效。

    为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效. 行 1,位置 1(Data at the root level is invalid.). ================== ...

  4. 转载---SQL Server XML基础学习之7--XML modify() 方法对 XML 数据中插入、更新或删除...

    /*------------------------------------------------------------------------------+ #| = : = : = : = : ...

  5. 【第48天】AJAX在原生JS中的使用,处理XML数据以及DBUtils的使用,假删除(标记删除)

    1 介绍 1.1 同步和异步 1.1.1 基于AJAX的异步传输与传统同步传输的对比 1.1.2 使用时间线表示同步和异步在过程上的区别 1.2 JS与AJAX的关系 1.3 AJAX用到的技术 1. ...

  6. ASP.NET - 演练:创建网页以显示 XML 数据

    数据通常是以 XML 格式提供给 Web 应用程序的.但是,XML 数据本质上是分层的,因此您可能希望能够在基于列表的控件中使用 XML 数据,如 GridView 或 DropDownList 控件 ...

  7. Android中XML数据解析

    转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML ...

  8. ASP.NET的属性绑定、表达式绑定、集合绑定、方法绑定、DropDownList集合绑定、DataList绑定、GridView绑定

    属性绑定 .aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defau ...

  9. Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序

    Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(一) 原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 (以后比较长的部 ...

最新文章

  1. 微信生态增长:裂变与分销讲解
  2. jenkins rec 分析 cve-2018-1000861 分析
  3. 面向对象实验一(类与对象)
  4. 3.6 激活函数-深度学习-Stanford吴恩达教授
  5. 数模学习笔记——微分方程(传染病模型)
  6. Spring Boot JPA中关联表的使用
  7. xcode开发html5工具,5个Xcode开发调试技巧
  8. 史上最全ClassLoader总结
  9. fcpx瘦身插件_FCPX减小内存,瘦身小技巧 - Final Cut - 沃CG - 一个更有价值的艺术设计学习平台 - ae教程 c4d教程 - Powered By EduSoho...
  10. MAC终端命令学习(入门版)
  11. html英文字体汇总,笔记 CSS常用中文字体英文名称对照表
  12. 由于找不到MSVCP20.dll,无法继续执行代码
  13. 在线sql服务器,SQL Server链接服务器
  14. 图像增强︱window7+opencv3.2+keras/theano简单应用(函数解读)
  15. 重磅!原清华副校长任职南科大校长:他考研三次,读博七年,想做科研人偶像...
  16. 学习MongoDB 六: MongoDB查询(游标操作、游标信息)(三)
  17. html 狗头小游戏祝大家情人节快乐
  18. 黑客老王:一个人的黑客史
  19. kaggle数据集汇总_【技术分享】无人机视觉检测算法研究及数据集汇总
  20. 关闭 Hadoop 集群

热门文章

  1. LeetCode(693)——交替位二进制数(JavaScript)
  2. JSON.stringify( new WebSocket(ws://localhost:8080/websocket.do))
  3. 句句真研—每日长难句打卡Day4
  4. 数据库原理—数据库基础(二)
  5. 我老公38岁每晚跑步,身体没变好,衰老还加速了,咋回事?
  6. iOS14.5 Beta7使用体验感受
  7. 郭麒麟、宋轶主演的《赘婿》1-8集拍得怎么样?
  8. 眼下很多创业者之所以会创业失败
  9. 为什么很多人赚不到钱?
  10. 怎么玩转你现在的圈子?