發(fā)表日期:2015-11-11 文章編輯:南昌開優(yōu)網(wǎng)絡(luò) 瀏覽次數(shù):4221 標(biāo)簽:ASP.NET應(yīng)用
XML數(shù)據(jù)如下: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節(jié)點 Elements 為節(jié)點
where (string)el.Attribute("Remarks") == "r-aa" //條件:節(jié)點的Remarks屬性的值為 r-aaAttribute 為屬性
select el;
foreach (XElement el in tests) //遍歷查詢結(jié)果
{
Response.Write((string)el.Attribute("Name") + "<br>"); //輸出查詢節(jié)點的Name屬性的值
}
輸出結(jié)果:
aaaaaa
二、添加節(jié)點
程序代碼:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加載需要操作的XML文件
root .Add(new XElement("newNode", "newNodes")); //添加一個名為newNode,值為newNodes的節(jié)點
輸出結(jié)果:
<?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>
三、刪除節(jié)點
程序代碼:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加載需要操作的XML文件
IEnumerable<XElement> tests =
from el in root.Elements("dbName") //查詢dbName節(jié)點
where (string)el.Attribute("Remarks") == "r-aa" //條件:節(jié)點的Remarks屬性的值為 r-aa
select el;
foreach (XElement el in tests) //遍歷查詢結(jié)果
{
el.RemoveNodes(); //刪除查詢節(jié)點的Name屬性的值
}
輸出結(jié)果:
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<dbName ID="53232faa-a069-46b1-8ff4-f5bf47db7a68" Name="bbbbb" Remarks="r-bbbb" />
</DataSet>
四、修改節(jié)點
程序代碼:
XElement root = XElement.Load(Server.MapPath("Test.xml")); //加載需要操作的XML文件
IEnumerable<XElement> tests =
from el in root.Elements("dbName") //查詢dbName節(jié)點
where (string)el.Attribute("Remarks") == "r-aa" //條件:節(jié)點的Remarks屬性的值為 r-aa
select el;
foreach (XElement el in tests) //遍歷查詢結(jié)果
{
el.SetValue("cccc"); //修改查詢節(jié)點的Name屬性的值
}
輸出結(jié)果:
<?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節(jié)點中的item節(jié)點
1、Repeater控制綁定xml
if (!Page.IsPostBack)
{
XmlDocument xml = new XmlDocument(); //創(chuàng)建xml對象
xml.Load(HttpContext.Current.Server.MapPath("~/xml/xixi.xml")); //打開xixi.xml文件
rep.DataSource = xml.DocumentElement.SelectSingleNode("channel").ChildNodes; //獲取SelectSingleNode指定節(jié)點的第一個下的所有節(jié)點
rep.DataBind();
}
前臺顯示:
<asp:HiddenField ID="hfOpreate" Value="add" runat="server" /> //隱藏域用于判斷是添加還是修改
<asp:HiddenField ID="hftitle" runat="server" /> //隱藏域用于保存?zhèn)魅氲膖itle值
<%@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指定節(jié)點中的文本指
<!--<%# ((XmlNode)Container.DataItem).Attributes["title"].Value %>--> //獲取節(jié)點的Attributes屬性值
</td>
<td style="border-right: 1px solid #ccc;" align="center">
<img src='<%#((XmlNode)Container.DataItem).SelectSingleNode("image").InnerText%>' width="150px" height="93" /> //獲取圖片節(jié)點的文本
</td>
<td style="border-right: 1px solid #ccc;" align="center">
<%#((XmlNode)Container.DataItem).SelectSingleNode("time").InnerText%> //獲取時間節(jié)點的文本
</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; //綁定指定節(jié)點下的所有子節(jié)點
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節(jié)點下的item節(jié)點
where (string)el.Element("title") == title //條件:節(jié)點的title屬性的值為輸入的title值
select el;
foreach (XElement el in tests) //遍歷查詢結(jié)果
{
Xiaobin.Utility.Tool.Alert("標(biāo)題重復(fù)了", this.Page); //因為刪除和修改都是傳入title所有。title必須是唯一的 .即查找
return;
}
XElement owenr = new XElement("item", new XElement[]{ //找到item節(jié)點并添加子節(jié)點
new XElement("title",title), //節(jié)點title
new XElement("image",image),//節(jié)點image
new XElement("link",link), //節(jié)點link
new XElement("time",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")), //節(jié)點time
});
element.Element("channel").Add(owenr); //xml文件的channel節(jié)點中加上item節(jié)點
}
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節(jié)點中的title節(jié)點,用于修改
select el; //element為xml文件.el為查詢出的結(jié)果節(jié)點
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節(jié)點下的item節(jié)點
where (string)el.Element("title") == title //條件:節(jié)點的title屬性的值為輸入的文本title值
select el;
foreach (XElement el in tests) //遍歷查詢結(jié)果
{
el.Remove(); //移除該節(jié)點
}
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 //查詢節(jié)點并判斷
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>