using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Xml;
namespace test
{
public partial class xmlDemo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//使用XmlDocument建立xml檔案
protected void Button1_Click(object sender, EventArgs e)
{
string dirPath = Server.MapPath("/xml");
DirectoryInfo dir = new DirectoryInfo(dirPath);
if (!dir.Exists)
{
dir.Create();
}
//建立xml檔案
XmlDocument xdoc = new XmlDocument();
//建立xml描述
XmlDeclaration xdec = xdoc.CreateXmlDeclaration("1.0", "utf-8", null);
xdoc.AppendChild(xdec);
//建立xml跟節點
XmlElement xroot = xdoc.CreateElement("persons");
xdoc.AppendChild(xroot);
//建立節點
XmlElement xper = xdoc.CreateElement("person");
xroot.AppendChild(xper);
//對person節點設定屬性
xper.SetAttribute("id", "0001");
//建立person節點下的子節點
//person節點下建立name節點
XmlElement xname = xdoc.CreateElement("name");
xper.AppendChild(xname);
XmlText textName = xdoc.CreateTextNode("test");
xname.AppendChild(textName);
//person節點下建立age節點
XmlElement xage = xdoc.CreateElement("age");
xper.AppendChild(xage);
XmlText textAge = xdoc.CreateTextNode("20");
xage.AppendChild(textAge);
//person節點下建立sex節點
XmlElement xsex = xdoc.CreateElement("sex");
xper.AppendChild(xsex);
XmlText textsex = xdoc.CreateTextNode("男");
xsex.AppendChild(textsex);
//儲存xml檔案
xdoc.Save(dirPath+"/"+"person.xml");
Response.Write("建立xml檔案成功");
}
//使用linq to xml建立xml檔案
protected void Button2_Click(object sender, EventArgs e)
{
string dirPath = Server.MapPath("/xml");
DirectoryInfo dir = new DirectoryInfo(dirPath);
if (!dir.Exists)
{
dir.Create();
}
XDocument xdoc = new XDocument();
//使用XDocument 可以不需要document描述
//建立跟節點
XElement root = new XElement("root");
//添加跟節點
xdoc.Add(root);
//建立person節點
XElement per = new XElement("person");
//添加person節點
root.Add(per);
//建立屬性節點
XAttribute xId = new XAttribute("id", "0002222");
//name節點
XElement name = new XElement("name", "test");
//age節點
XElement age = new XElement("age", "22");
//sex節點
XElement sex = new XElement("sex", "男");
//對person節點添加id屬性 以及name sex age節點
per.Add(xId,name, sex, age);
//儲存linq to xml 檔案
xdoc.Save(dirPath + "/" + "linqToXml.xml");
Response.Write("linq to xml儲存檔案成功");
}
//使用linq to xml 批量添加person節點
//xDocument.Root.Add() 批量添加
protected void Button3_Click(object sender, EventArgs e)
{
string dirPath = Server.MapPath("/xml");
DirectoryInfo dir = new DirectoryInfo(dirPath);
if (!dir.Exists)
{
dir.Create();
}
XDocument xdoc = new XDocument();
//使用XDocument 可以不需要document描述
//建立跟節點
XElement root = new XElement("root");
xdoc.Add(root);
Random r = new Random();
for (int i = 1; i <= 100;i++ )
{
//person節點
XElement per = new XElement("person");
//id屬性
XAttribute xId = new XAttribute("id", i);
//name
XElement name = new XElement("name","test"+i);
//age
XElement age = new XElement("age",r.Next(18,30));
//sex
XElement sex = new XElement("sex", "男女"[r.Next(2)]);
per.Add(xId, name, sex, age);
xdoc.Root.Add(per);
}
//儲存linq to xml 檔案
xdoc.Save(dirPath + "/" + "personList.xml");
Response.Write("linq to xml批量添加成功");
}
//linq to xml 查找節點
protected void Button5_Click(object sender, EventArgs e)
{
string path = Server.MapPath("/xml/personList.xml");
XDocument xdoc = XDocument.Load(path);
var query = xdoc.DescendantNodes().Where(
el => {
//将el轉為XElement對象
XElement xe = el as XElement;
if (xe == null)
{
return false;
}
//找到age節點
XElement xAge = xe.Element("age");
//找到sex節點
XElement xSex = xe.Element("sex");
if(xAge !=null && xSex !=null)
{
int age = Convert.ToInt32(xAge.Value);
string sex = xSex.Value;
if (age >= 20 && age <= 25 && sex == "女")
{
return true;
}
}
return false;
}
);
//将查到的節點儲存到xml檔案中
string savePath = Server.MapPath("/xml/search.xml");
XDocument saveXdoc = new XDocument();
XElement root = new XElement("root");
saveXdoc.Add(root);
root.Add(query);
saveXdoc.Save(savePath);
Response.Write("linq to xml查找成功");
}
//linq to xml 修改節點
protected void Button4_Click(object sender, EventArgs e)
{
string path = Server.MapPath("/xml/personList.xml");
XDocument xdoc = XDocument.Load(path);
var query = from p in xdoc.Descendants("person")
where Convert.ToInt32(p.Attribute("id").Value) ==1
select p;
var first = query.FirstOrDefault();
if (first != null)
{
XElement searchElement = first as XElement;
XElement xname = searchElement.Element("name");
xname.Value = "劉德華";
xdoc.Save(path);
Response.Write("linq to xml修改成功");
}
}
//linq to xml 添加節點
protected void Button6_Click(object sender, EventArgs e)
{
string path = Server.MapPath("/xml/personList.xml");
XDocument xdoc = XDocument.Load(path);
//找到根節點
XElement root = xdoc.Element("root");
XElement xPer = new XElement("person");
XAttribute xid = new XAttribute("id", "9999");
XElement xName = new XElement("name","張學友");
XElement xSex = new XElement("sex","男");
XElement xAge = new XElement("age","99");
root.Add(xPer);
xPer.Add(xPer, xid, xName, xAge, xSex);
xdoc.Save(path);
Response.Write("添加成功");
}
//linq to xml 删除節點
protected void Button7_Click(object sender, EventArgs e)
{
string path = Server.MapPath("/xml/personList.xml");
XDocument xdoc = XDocument.Load(path);
var query = from p in xdoc.Descendants("person")
where Convert.ToInt32(p.Attribute("id").Value) == 1
select p;
var first = query.FirstOrDefault();
if (first != null)
{
XElement searchElement = first as XElement;
searchElement.Remove();
xdoc.Save(path);
Response.Write("linq to xml删除成功");
}
}
}
}