XML数据如下:Test.xml
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<dbName ID="b785723f-e7ef-448a-81b2-527de05f422a" Name="aaaaaa" Remarks="r-aa" />
<dbName ID="53232faa-a069-46b1-8ff4-f5bf47db7a68" Name="bbbbb" Remarks="r-bbbb" />
</DataSet>
一、查询
程序代码:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加载需要操作的XML文件
IEnumerable<XElement> tests =
from el in root.Elements("dbName") //查询dbName节点 Elements 为节点
where (string)el.Attribute("Remarks") == "r-aa" //条件:节点的Remarks属性的值为 r-aaAttribute 为属性
select el;
foreach (XElement el in tests) //遍历查询结果
{
Response.Write((string)el.Attribute("Name") + "<br>"); //输出查询节点的Name属性的值
}
输出结果:
aaaaaa
二、添加节点
程序代码:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加载需要操作的XML文件
root .Add(new XElement("newNode", "newNodes")); //添加一个名为newNode,值为newNodes的节点
输出结果:
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<dbName ID="b785723f-e7ef-448a-81b2-527de05f422a" Name="aaaaaa" Remarks="r-aa" />
<dbName ID="53232faa-a069-46b1-8ff4-f5bf47db7a68" Name="bbbbb" Remarks="r-bbbb" />
<newNode>newNodes</newNode>
</DataSet>
三、删除节点
程序代码:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加载需要操作的XML文件
IEnumerable<XElement> tests =
from el in root.Elements("dbName") //查询dbName节点
where (string)el.Attribute("Remarks") == "r-aa" //条件:节点的Remarks属性的值为 r-aa
select el;
foreach (XElement el in tests) //遍历查询结果
{
el.RemoveNodes(); //删除查询节点的Name属性的值
}
输出结果:
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<dbName ID="53232faa-a069-46b1-8ff4-f5bf47db7a68" Name="bbbbb" Remarks="r-bbbb" />
</DataSet>
四、修改节点
程序代码:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加载需要操作的XML文件
IEnumerable<XElement> tests =
from el in root.Elements("dbName") //查询dbName节点
where (string)el.Attribute("Remarks") == "r-aa" //条件:节点的Remarks属性的值为 r-aa
select el;
foreach (XElement el in tests) //遍历查询结果
{
el.SetValue("cccc"); //修改查询节点的Name属性的值
}
输出结果:
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<dbName ID="b785723f-e7ef-448a-81b2-527de05f422a" Name="cccc" Remarks="r-aa" />
<dbName ID="53232faa-a069-46b1-8ff4-f5bf47db7a68" Name="bbbbb" Remarks="r-bbbb" />
</DataSet>
例子:
xml文件 xixi.xml
<?xml version="1.0" encoding="utf-8"?>
<data>
<config>
<roundCorner>0</roundCorner>
<autoPlayTime>5</autoPlayTime>
<isHeightQuality>false</isHeightQuality>
<blendMode>normal</blendMode>
</config>
<channel>
<item>
<title>测试1</title>
<image>/upload/20121031/4e43c84e-b4d5-4f72-98f1-68e9f92c76da.jpg</image>
<link>http://www.baidu.com</link>
<time>2012-10-31 15:34:12</time>
</item>
<item>
<title>测试2</title>
<image>/upload/20121031/7340b809-adc3-458f-a408-fb5bce3917c9.jpg</image>
<link>bbab</link>
<time>2012-10-31 15:38:14</time>
</item>
</channel>
</data>
使用Linq操作channel节点中的item节点
1、Repeater控制绑定xml
if (!Page.IsPostBack)
{
XmlDocument xml = new XmlDocument(); //创建xml对象
xml.Load(HttpContext.Current.Server.MapPath("~/xml/xixi.xml")); //打开xixi.xml文件
rep.DataSource = xml.DocumentElement.SelectSingleNode("channel").ChildNodes; //获取SelectSingleNode指定节点的第一个下的所有节点
rep.DataBind();
}
前台显示:
<asp:HiddenField ID="hfOpreate" Value="add" runat="server" /> //隐藏域用于判断是添加还是修改
<asp:HiddenField ID="hftitle" runat="server" /> //隐藏域用于保存传入的title值
<%@import namespace="System.Xml"%> //在前台的aspx文件中引用Xml的命名空间
<asp:Repeater ID="rep" runat="server">
<ItemTemplate>
<tr>
<td style="border-right: 1px solid #ccc;" align="center">
<%#((XmlNode)Container.DataItem).SelectSingleNode("title").InnerText%> //获取SelectSingleNode指定节点中的文本指
<!--<%# ((XmlNode)Container.DataItem).Attributes["title"].Value %>--> //获取节点的Attributes属性值
</td>
<td style="border-right: 1px solid #ccc;" align="center">
<img src='<%#((XmlNode)Container.DataItem).SelectSingleNode("image").InnerText%>' width="150px" height="93" /> //获取图片节点的文本
</td>
<td style="border-right: 1px solid #ccc;" align="center">
<%#((XmlNode)Container.DataItem).SelectSingleNode("time").InnerText%> //获取时间节点的文本
</td>
<td align="center">
<asp:LinkButton ID="lbtnDel" CommandArgument='<%#((XmlNode)Container.DataItem).SelectSingleNode("title").InnerText%>' OnClientClick="return confirm('确定删除吗?');" runat="server" OnClick="del">删除</asp:LinkButton>
<asp:LinkButton ID="lbtnRep" OnClick="edit" CommandArgument='<%#((XmlNode)Container.DataItem).SelectSingleNode("title").InnerText %>' runat="server">修改</asp:LinkButton>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
后台:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
XmlDocument xml = new XmlDocument();
xml.Load(HttpContext.Current.Server.MapPath("~/xml/xixi.xml")); //打开文本
rep.DataSource = xml.DocumentElement.SelectSingleNode("channel").ChildNodes; //绑定指定节点下的所有子节点
rep.DataBind();
}
}
//上传
protected void btnUpload_Click(object sender, EventArgs e)
{
try
{
string fimg = Xiaobin.Utility.Tool.Upload(fuimg, new string[] { ".jpg", ".png" }, 1, Server.MapPath("../upload/"));
img.ImageUrl = "../upload/" + fimg;
img.ToolTip = fimg;
}
catch (Exception ex)
{
Xiaobin.Utility.Tool.Alert(ex.Message, this.Page);
}
}
//保存
protected void btnAdd_Click(object sender, EventArgs e)
{
string title = txttitle.Text.Trim();
string image = "/upload/" + img.ToolTip; //加上upload保存到xml文件中
string link = txtlink.Text.Trim();
if (title.Length == 0 || image.Length == 0 || link.Length == 0)
{
Xiaobin.Utility.Tool.Alert("请输入完整再提交", this.Page);
return;
}
XElement element = XElement.Load(Server.MapPath("/xml/xixi.xml")); //打开文件
if (hfOpreate.Value == "add") //添加
{
IEnumerable<XElement> tests =
from el in element.Elements("channel").Elements("item") //查询channel节点下的item节点
where (string)el.Element("title") == title //条件:节点的title属性的值为输入的title值
select el;
foreach (XElement el in tests) //遍历查询结果
{
Xiaobin.Utility.Tool.Alert("标题重复了", this.Page); //因为删除和修改都是传入title所有。title必须是唯一的 .即查找
return;
}
XElement owenr = new XElement("item", new XElement[]{ //找到item节点并添加子节点
new XElement("title",title), //节点title
new XElement("image",image),//节点image
new XElement("link",link), //节点link
new XElement("time",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), //节点time
});
element.Element("channel").Add(owenr); //xml文件的channel节点中加上item节点
}
string t = hftitle.Value; //改
if (hfOpreate.Value == "edit")
{
IEnumerable<XElement> tests =
from el in element.Elements("channel").Elements("item")
where (string)el.Element("title") == t //通过hftitle的值查询出xml节点中的title节点,用于修改
select el; //element为xml文件.el为查询出的结果节点
foreach (XElement el in tests)
{
el.Element("title").Value = title;
el.Element("image").Value = image;
el.Element("link").Value = link;
}
}
element.Save(Server.MapPath("/xml/xixi.xml")); //保存
Xiaobin.Utility.Tool.AlertAndGo("添加成功", Request.Url.ToString(), this.Page);
}
//删除
protected void del(object sender, EventArgs e)
{
string title = (sender as LinkButton).CommandArgument; //获取传入的值
XElement element = XElement.Load(Server.MapPath("/xml/xixi.xml")); //加载需要操作的XML文件
IEnumerable<XElement> tests =
from el in element.Elements("channel").Elements("item") //查询channel节点下的item节点
where (string)el.Element("title") == title //条件:节点的title属性的值为输入的文本title值
select el;
foreach (XElement el in tests) //遍历查询结果
{
el.Remove(); //移除该节点
}
element.Save(Server.MapPath("/xml/xixi.xml")); //保存
Xiaobin.Utility.Tool.AlertAndGo("添加成功", Request.Url.ToString(), this.Page);
}
//修改
protected void edit(object sender, EventArgs e)
{
string title = (sender as LinkButton).CommandArgument; //获取传入的title
hfOpreate.Value = "edit"; //修改事件
hftitle.Value = title; //用隐藏域存储title用于修改事件
XElement element = XElement.Load(Server.MapPath("/xml/xixi.xml")); //打开文件
IEnumerable<XElement> tests =
from el in element.Elements("channel").Elements("item")
where (string)el.Element("title") == title //查询节点并判断
select el;
foreach (XElement el in tests)
{
txtlink.Text = el.Element("link").Value; //前台的TextBox重新赋值
txttitle.Text = el.Element("title").Value;
img.ToolTip = el.Element("image").Value;
img.ImageUrl = "../upload/" + el.Element("image").Value;
}
}
简单的绑定Repeater控件
<?xml version="1.0" encoding="UTF-8"?> //XML文件 <ThreadList Count="476" fid="103"> <Thread tid="396133" uid="279005" subject="含义和用法即"></Thread> <Thread tid="396132" uid="279005" subject="字母诠释下的夏奈尔></Thread> <ThreadList>
XmlDocument doc = new XmlDocument(); //.cs代码 doc.LoadXml("xml"); this.repTopicList.DataSource = doc.DocumentElement.ChildNodes; this.repTopicList.DataBind();
<%@ Import Namespace="System.Xml"%> //前台显示 <asp:Repeater ID="repTopicList" runat="server"> <ItemTemplate> <span><%# ((XmlNode)Container.DataItem).Attributes["subject"].Value%><span><br /> </ItemTemplate></asp:Repeater>