Linq To Xml 增删改查

记录一下,别的都比较普通,只有这一句比较有意思。
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 " );

 

ExpandedBlockStart.gif 大气象
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的方法是,比如你建了个类似这样的类。

ExpandedBlockStart.gif 大气象
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文件时,获取时不可以加根节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值