public partial class QueryXML : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
///ReadXmlFile();
///QueryRootElement();
///QueryElementByName();
///QueryElementByAttribute();
///QueryElementBySub();
///QueryElementByOrder();
///QueryElementByCompute();
}
private void ReadXmlFile()//读取XML文件
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XElement xe = XElement.Load(xmlFilePath);
///显示XML文件的内容
Response.Write(xe);
///设置网页显示的形式为XML文件
Response.ContentType = "text/xml";
Response.End();
}
private void QueryRootElement()//查询根元素
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XDocument doc = XDocument.Load(xmlFilePath);
///查询根元素
IEnumerable<XElement> elements = from e in doc.Elements("Books")
select e;
///输出根元素的名称
foreach (XElement xe in elements)
{
Response.Write(xe.Name + "<br />");
}
}
private void QueryElementByName()//查询指点定名称的元素
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XElement xes = XElement.Load(xmlFilePath);
///查询元素
IEnumerable<XElement> elements = from e in xes.Elements("Book")
where (string)e.Element("Name") == "Book 0002"
select e;
///输出元素的ID属性的值
foreach (XElement xe in elements)
{
Response.Write(xe.Name.LocalName + ":" + xe.Attribute("ID").Value + "<br />");
}
}
private void QueryElementByAttribute()//查询指定属性的元素
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XElement xes = XElement.Load(xmlFilePath);
///查询元素
IEnumerable<XElement> elements = from e in xes.Elements("Book")
where e.Attribute("ID").Value.IndexOf("10") > -1
select e;
///输出元素的ID属性的值
foreach (XElement xe in elements)
{
Response.Write(xe.Name.LocalName + ":" + xe.Attribute("ID").Value + "<br />");
}
}
private void QueryElementBySub()//查询指定元素的子元素
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XElement xes = XElement.Load(xmlFilePath);
///查询元素
IEnumerable<XElement> elements = from e in xes.Descendants("Remark")
select e;
///输出元素的值
foreach (XElement xe in elements)
{
Response.Write(xe.Name.LocalName + ":" + xe.Value + "<br />");
}
}
private void QueryElementByOrder()//查询元素并排列
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XElement xes = XElement.Load(xmlFilePath);
///查询元素
IEnumerable<XElement> elements = from e in xes.Elements("Book")
where e.Attribute("ID").Value.IndexOf("10") > -1
orderby (string)e.Element("Name") descending
select e;
///输出元素的名称
foreach (XElement xe in elements)
{
Response.Write(xe.Element("Name").ToString() + "<br />");
}
}
private void QueryElementByCompute()//查询元素并计算指定的值
{ ///导入XML文件
string xmlFilePath = Server.MapPath("Data/Books.xml");
XElement xes = XElement.Load(xmlFilePath);
///查询根元素
IEnumerable<XElement> elements = from e in xes.Elements("Book")
where e.Attribute("ID").Value.IndexOf("10") > -1
orderby (string)e.Element("Name") descending
select e;
///计算价格的平均值
decimal avg = elements.Average(e => decimal.Parse(e.Element("Price").Value));
Response.Write("Average:" + avg.ToString() + "<br />");
}
}
book.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book ID="101">
<No>00001</No>
<Name>Book 0001</Name>
<Price>100</Price>
<Remark>This is a book 00001.</Remark>
</Book>
<Book ID="102">
<No>00002</No>
<Name>Book 0002</Name>
<Price>200</Price>
<Remark>This is a book 00002.</Remark>
</Book>
<Book>
<ID>106</ID>
<No>0006</No>
<Name>Book 0006</Name>
<Price>600</Price>
<Remark>This is a book 0006.</Remark>
</Book>
</Books>
上面只是对简单xml的操作,如果复杂的xml,原理一样,但是做起来就不是这么简单了,所以对xml的操作,本人还是不建议用linq,相比较看我觉得xpath要简单很多!