记录一下,别的都比较普通,只有这一句比较有意思。 doc.Root.Descendants("").Select(p=> new {}).Where(); 跟jQuery的层级筛选比较类似jQuery("").children().first().html();


记录一下,别的都比较普通,只有这一句比较有意思。

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");


 


Linq To Xml 增删改查_加载Linq To Xml 增删改查_jquery_02大气象


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

}


 

另外记录一个知识点:

当你在Silverlight中调用Web Serivce的方法是,比如你建了个类似这样的类。


Linq To Xml 增删改查_加载Linq To Xml 增删改查_jquery_02大气象


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; }

    }


 

在Silverlight项目中想得到这样的引用:



HCLoad.HCLoadServiceReference.ItemFloor item = new HCLoad.HCLoadServiceReference.ItemFloor();

必须在Web Service中包含返回此类似的Web Service方法。比如:


#region 楼层


[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>


 

第二种格式

<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,

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,

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

});

}


 

使用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

});

}


 

二、获得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;

}


 

 

 

/// <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;

}


 

 

 

/// <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;

}


 

 总结:当用XDocument.Load加载xml文件时,根节点可以忽略,获取时加不加都可以

         当用XElement.Load加载xml文件时,获取时不可以加根节点