doc.Root.Descendants("").Select(p=> new {}).Where();
跟jQuery的层级筛选比较类似jQuery("").children().first().html();
doc.Root.Descendants(
"
floor
"
).Select(p
=>
new
{
Name = p.Element( " name " ).Value
}).Where(p => p.Name == " 1楼层xml " );
{
Name = p.Element( " name " ).Value
}).Where(p => p.Name == " 1楼层xml " );
大气象
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Linq;
/// <summary>
/// DFBLL 的摘要说明
/// </summary>
public class DFBLL
{
public DFBLL()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 楼层
// 楼层信息
public static List < ItemFloor > GetFloorInfo()
{
XDocument doc = XDocument.Load(GetXmlFile());
var items = doc.Root.Descendants( " floor " ).Select(p => new
{
Name = p.Element( " name " ).Value
}).Where(p => p.Name == " 1楼层xml " );
List < ItemFloor > myList = new List < ItemFloor > ();
foreach (var item in items)
{
ItemFloor it = new ItemFloor
{
Name = item.Name
};
myList.Add(it);
}
return myList;
}
#endregion
#region 工程
// 工程信息
public static List < ItemProject > GetProInfo()
{
XDocument doc = XDocument.Load(GetXmlFile());
var items = doc.Root.Descendants( " structure " ).Select(p => new
{
Name = p.Element( " name " ).Value
});
List < ItemProject > myList = new List < ItemProject > ();
foreach (var item in items)
{
ItemProject it = new ItemProject
{
Name = item.Name
};
myList.Add(it);
}
return myList;
}
#endregion
#region 留言簿
// 返回路径
public static string GetXmlFile()
{
return HttpContext.Current.Server.MapPath( " XmlDB/project.xml " );
}
// 查询留言
public static List < Item > GetGuestList()
{
XDocument doc = XDocument.Load(GetXmlFile());
var items = doc.Root.Descendants( " item " ).Select(p => new
{
ID = Convert.ToInt32(p.Element( " id " ).Value),
Name = p.Element( " name " ).Value,
Email = p.Element( " email " ).Value,
Logo = p.Element( " logo " ).Value,
Content = p.Element( " content " ).Value,
AddTime = p.Element( " addtime " ).Value,
IP = p.Element( " ip " ).Value
});
List < Item > myList = new List < Item > ();
foreach (var item in items)
{
Item it = new Item
{
AddTime = item.AddTime,
Content = item.Content,
Email = item.Email,
ID = item.ID,
IP = item.IP,
Logo = item.Logo,
Name = item.Name
};
myList.Add(it);
}
return myList;
}
// 增加留言
public static void InsertGuest(Item item)
{
XDocument doc = XDocument.Load(GetXmlFile());
XElement contacts = new XElement( " item " ,
new XElement( " id " , item.ID),
new XElement( " name " , item.Name),
new XElement( " email " , item.Email),
new XElement( " logo " , item.Logo),
new XElement( " content " , item.Content),
new XElement( " addtime " , item.AddTime),
new XElement( " ip " , HttpContext.Current.Request.UserHostAddress)
);
doc.Root.AddFirst(contacts);
doc.Save(GetXmlFile());
}
// 删除留言
public static void DeleteGuest( int id)
{
XDocument xml = XDocument.Load(GetXmlFile());
var contacts = from p in xml.Root.Elements( " item " )
where p.Element( " id " ).Value == id.ToString()
select p;
contacts.Remove();
xml.Save(GetXmlFile());
}
#endregion
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Xml.Linq;
/// <summary>
/// DFBLL 的摘要说明
/// </summary>
public class DFBLL
{
public DFBLL()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 楼层
// 楼层信息
public static List < ItemFloor > GetFloorInfo()
{
XDocument doc = XDocument.Load(GetXmlFile());
var items = doc.Root.Descendants( " floor " ).Select(p => new
{
Name = p.Element( " name " ).Value
}).Where(p => p.Name == " 1楼层xml " );
List < ItemFloor > myList = new List < ItemFloor > ();
foreach (var item in items)
{
ItemFloor it = new ItemFloor
{
Name = item.Name
};
myList.Add(it);
}
return myList;
}
#endregion
#region 工程
// 工程信息
public static List < ItemProject > GetProInfo()
{
XDocument doc = XDocument.Load(GetXmlFile());
var items = doc.Root.Descendants( " structure " ).Select(p => new
{
Name = p.Element( " name " ).Value
});
List < ItemProject > myList = new List < ItemProject > ();
foreach (var item in items)
{
ItemProject it = new ItemProject
{
Name = item.Name
};
myList.Add(it);
}
return myList;
}
#endregion
#region 留言簿
// 返回路径
public static string GetXmlFile()
{
return HttpContext.Current.Server.MapPath( " XmlDB/project.xml " );
}
// 查询留言
public static List < Item > GetGuestList()
{
XDocument doc = XDocument.Load(GetXmlFile());
var items = doc.Root.Descendants( " item " ).Select(p => new
{
ID = Convert.ToInt32(p.Element( " id " ).Value),
Name = p.Element( " name " ).Value,
Email = p.Element( " email " ).Value,
Logo = p.Element( " logo " ).Value,
Content = p.Element( " content " ).Value,
AddTime = p.Element( " addtime " ).Value,
IP = p.Element( " ip " ).Value
});
List < Item > myList = new List < Item > ();
foreach (var item in items)
{
Item it = new Item
{
AddTime = item.AddTime,
Content = item.Content,
Email = item.Email,
ID = item.ID,
IP = item.IP,
Logo = item.Logo,
Name = item.Name
};
myList.Add(it);
}
return myList;
}
// 增加留言
public static void InsertGuest(Item item)
{
XDocument doc = XDocument.Load(GetXmlFile());
XElement contacts = new XElement( " item " ,
new XElement( " id " , item.ID),
new XElement( " name " , item.Name),
new XElement( " email " , item.Email),
new XElement( " logo " , item.Logo),
new XElement( " content " , item.Content),
new XElement( " addtime " , item.AddTime),
new XElement( " ip " , HttpContext.Current.Request.UserHostAddress)
);
doc.Root.AddFirst(contacts);
doc.Save(GetXmlFile());
}
// 删除留言
public static void DeleteGuest( int id)
{
XDocument xml = XDocument.Load(GetXmlFile());
var contacts = from p in xml.Root.Elements( " item " )
where p.Element( " id " ).Value == id.ToString()
select p;
contacts.Remove();
xml.Save(GetXmlFile());
}
#endregion
}
另外记录一个知识点:
当你在Silverlight中调用Web Serivce的方法是,比如你建了个类似这样的类。
大气象
using
System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Item 的摘要说明
/// </summary>
public class ItemFloor
{
public ItemFloor()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public string Name { get ; set ; }
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Item 的摘要说明
/// </summary>
public class ItemFloor
{
public ItemFloor()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public string Name { get ; set ; }
}
在Silverlight项目中想得到这样的引用:
HCLoad.HCLoadServiceReference.ItemFloor item
=
new
HCLoad.HCLoadServiceReference.ItemFloor();
#region
楼层
[WebMethod]
public List < ItemFloor > GetFloorList()
{
return DFBLL.GetFloorInfo();
}
[WebMethod]
public List < ItemFloor > GetFloorList()
{
return DFBLL.GetFloorInfo();
}
如果不这样,在Silverlight中的引用就分报错。
参考:Linq To Xml、XPath得到两种格式的xml
前言:初学linq to xml ,做例子总结以防时间长忘记,望高手指点。
第一种格式
1
2 < userInfoList >
3 < userInfo >
4 < name > 呵呵 </ name >
5 < age > 18 </ age >
6 </ userInfo >
7 < userInfo >
8 < name > 哈哈 </ name >
9 < age > 20 </ age >
10 </ userInfo >
11 </ userInfoList >
2 < userInfoList >
3 < userInfo >
4 < name > 呵呵 </ name >
5 < age > 18 </ age >
6 </ userInfo >
7 < userInfo >
8 < name > 哈哈 </ name >
9 < age > 20 </ age >
10 </ userInfo >
11 </ userInfoList >
第二种格式
<userInfoList>
<studentInfo>
<item naem="呵呵" age="18"></item>
<item naem="哈哈" age="20"></item>
</studentInfo>
</userInfoList>
一、获得xml列表
使用Linq To Xml得到第一种格式的xml
// 此行可以为 var list = from l in xDocument.Descendants("userInfo")
var list = from l in xDocument.Descendants("userInfoList").Descendants("userInfo")
select new { name = l.Descendants("name").FirstOrDefault().Value,
select new { name = l.Descendants("name").FirstOrDefault().Value,
age = l.Descendants("age").FirstOrDefault().Value };
使用Linq To Xml得到第二种格式的xml
// 此行可以为 list = from l in xDocument.Descendants("studentInfo")
list = from l in xDocument.Descendants("userInfoList").Descendants("studentInfo").Descendants("item")
select new { name = l.Attribute("name").Value,
list = from l in xDocument.Descendants("userInfoList").Descendants("studentInfo").Descendants("item")
select new { name = l.Attribute("name").Value,
age = l.Attribute("age").Value };
使用XPath得到第一种格式的xml
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(HttpContext.Current.Server.MapPath("xml.xml"));
List < object > list = new List < object > ();
XmlNodeList nodeList = xmlDocument.SelectNodes("userInfoList/userInfo");
foreach (XmlNode node in nodeList)
{
list.Add(new
{
name = node["name"].InnerText,
age = node["age"].InnerText
});
}
xmlDocument.Load(HttpContext.Current.Server.MapPath("xml.xml"));
List < object > list = new List < object > ();
XmlNodeList nodeList = xmlDocument.SelectNodes("userInfoList/userInfo");
foreach (XmlNode node in nodeList)
{
list.Add(new
{
name = node["name"].InnerText,
age = node["age"].InnerText
});
}
使用XPath得到第二种格式的xml
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(HttpContext.Current.Server.MapPath("xml.xml"));
List < object > list = new List < object > ();
XmlNodeList nodeList = xmlDocument.SelectNodes("userInfoList/studentInfo/item");
foreach (XmlNode node in nodeList)
{
list.Add(new
{
name = node.Attributes["name"].Value,
age = node.Attributes["age"].Value
});
}
xmlDocument.Load(HttpContext.Current.Server.MapPath("xml.xml"));
List < object > list = new List < object > ();
XmlNodeList nodeList = xmlDocument.SelectNodes("userInfoList/studentInfo/item");
foreach (XmlNode node in nodeList)
{
list.Add(new
{
name = node.Attributes["name"].Value,
age = node.Attributes["age"].Value
});
}
二、获得xml指定节点的值
///
<
summary
>
/// 根据姓名获得年龄 Linq To Xml 第一种格式
/// </ summary >
private static string GetAge(string name)
{
string age = string.Empty;
XElement element = XElement.Load(HttpContext.Current.Server.MapPath("xml.xml"));
var list = from temp in element.Descendants("userInfo")
where temp.Descendants("name").FirstOrDefault().Value == name
select temp.Descendants("age").FirstOrDefault().Value;
if (list.Count() > 0)
{
age = list.First();
}
return age;
}
/// 根据姓名获得年龄 Linq To Xml 第一种格式
/// </ summary >
private static string GetAge(string name)
{
string age = string.Empty;
XElement element = XElement.Load(HttpContext.Current.Server.MapPath("xml.xml"));
var list = from temp in element.Descendants("userInfo")
where temp.Descendants("name").FirstOrDefault().Value == name
select temp.Descendants("age").FirstOrDefault().Value;
if (list.Count() > 0)
{
age = list.First();
}
return age;
}
///
<
summary
>
/// 根据姓名获得年龄 Linq To Xml 第二种格式
/// </ summary >
private static string GetAgeByName(string name)
{
string age = string.Empty;
XElement element = XElement.Load(HttpContext.Current.Server.MapPath("xml.xml"));
var list = from temp in element.Descendants("studentInfo").Descendants("item")
where temp.Attribute("name").Value == name
select temp.Attribute("age").Value;
if (list.Count() > 0)
{
age = list.First();
}
return age;
}
/// 根据姓名获得年龄 Linq To Xml 第二种格式
/// </ summary >
private static string GetAgeByName(string name)
{
string age = string.Empty;
XElement element = XElement.Load(HttpContext.Current.Server.MapPath("xml.xml"));
var list = from temp in element.Descendants("studentInfo").Descendants("item")
where temp.Attribute("name").Value == name
select temp.Attribute("age").Value;
if (list.Count() > 0)
{
age = list.First();
}
return age;
}
///
<
summary
>
/// 根据姓名获得年龄 XPath方式
/// </ summary >
private static string GetAgeByXPath(string name)
{
string age = string.Empty;
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(HttpContext.Current.Server.MapPath("xml.xml"));
// XPath第二种格式
//XmlNode xNode = xmlDocument.SelectSingleNode("userInfoList/studentInfo/item[@name=\""+name+"\"]");
// XPath第一种格式
XmlNode xNode = xmlDocument.SelectSingleNode("userInfoList/userInfo[name=\"" + name + "\"]");
if (xNode!=null)
{
//age = xNode.Attributes["age"].Value;
age = xNode["age"].InnerText;
}
return age;
}
/// 根据姓名获得年龄 XPath方式
/// </ summary >
private static string GetAgeByXPath(string name)
{
string age = string.Empty;
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(HttpContext.Current.Server.MapPath("xml.xml"));
// XPath第二种格式
//XmlNode xNode = xmlDocument.SelectSingleNode("userInfoList/studentInfo/item[@name=\""+name+"\"]");
// XPath第一种格式
XmlNode xNode = xmlDocument.SelectSingleNode("userInfoList/userInfo[name=\"" + name + "\"]");
if (xNode!=null)
{
//age = xNode.Attributes["age"].Value;
age = xNode["age"].InnerText;
}
return age;
}
总结:当用XDocument.Load加载xml文件时,根节点可以忽略,获取时加不加都可以
当用XElement.Load加载xml文件时,获取时不可以加根节点