Linq to XML说法——(一)创建,添加,查询

Xml操作

场景:产品采购单。

描述:产品采购单用于描述产品的采购,它可以从各地进行采购,且每地可以采购多种商品。地址信息包括:城市,电话,联系人,日期,商品;商品包括0到多项,商品包括:产品名称,编号,描述,单价,采购总量。

<? xml version="1.0" encoding="utf-8"  ?>
< PurchaseOrder >
  
< address >
    
< city ></ city >
    
< call ></ call >
    
< contact ></ contact >
    
< opdate ></ opdate >
    
< products >
      
< product >
        
< name ></ name >
        
< num ></ num >
        
< price ></ price >
        
< total ></ total >
        
< description ></ description >
      
</ product >
    
</ products >
  
</ address >
</ PurchaseOrder >

 

(一)创建单子

创建声明

XDocument doc  =   new  XDocument();
doc.Declaration 
=   new  XDeclaration( " 1.0 " , " utf-8 " , " no " );

 

说明:Xdocument所以名字空间:System.Xml.Linq

(二)添加根元素

doc.Add( new  XElement( " purchaseOrder " ));

 

(三)添加地址address元素

doc.Element( " purchaseOrder " ).Add( new  XElement( " address " ));
            doc.Element(
" purchaseOrder " ).Element( " address " ).
                Add(
                
new  XElement( " city " ),
                
new  XElement( " call " ),
                
new  XElement( " contact " ),
                
new  XElement( " opdate " ),
                
new  XElement( " products " )
                );

 

(四)Linq to xml添加产品

// 定义产品列表
IList < product >  _list  =   new  List < product > () { 
new  product{ name = " 产品1 " , num = " B001 " , price = 12 ,total = 20 ,description = " 产品1描述 " },
new  product{ name = " 产品2 " , num = " B002 " , price = 16 ,total = 22 ,description = " 产品2描述 " }
}; 

// 添加产品
doc.Element( " purchaseOrder " ).Element( " address " ).Element( " products " ).Add
   (
    from q 
in  _list 
    select 
new  XElement( " product " ,
    
new  XElement( " name " ,q.name),
    
new  XElement( " num " ,q.num),
    
new  XElement( " price " , q.price),
    
new  XElement( " total " , q.total),
    
new  XElement( " description " , q.description)
    ));

 

(五)设置元素值

// 为city,call,contact,opdate设置值
var _addressList  =  from q  in  doc.Elements( " purchaseOrder " ).Elements( " address " ) select q;

foreach  (XElement dd  in  _addressList)
{
    
foreach  (XElement e1  in  (from p  in  dd.Elements() select p))
    {
        
switch  (e1.Name.ToString())
        { 
        
case   " city " :
               e1.SetValue(
" 石家庄 " );
              
break ;
        
case   " call " :
               e1.SetValue(
" 86868666 " );
               
break ;
        
case   " contact " :
              e1.SetValue(
" 暂无联系方式 " );
               
break ;
        
case   " opdate " :
               e1.SetValue(
" 2009-12-21 " );
               
break ;
        }
    }
}

 

(六)保存文件

doc.Save( @" E:\test8\LinqTest\LToXml\source\PurchaseOrder.xml " );

 

(七)在最后一个产品之后加一个新产品

doc.Element( " purchaseOrder " ).Element( " address " ).Element( " products " )
                .Add(
new  XElement( " product " ,
                
new  XElement( " name " " 产品3 " ),
                
new  XElement( " num " " C003 " ),
                
new  XElement( " price " 18 ),
                
new  XElement( " total " 108 ),
                
new  XElement( " description " " 产品3 " )
                ));

 

(八)在第一个产品这前添加一个新产品

doc.Element( " purchaseOrder " ).Element( " address " ).Element( " products " ).AddFirst
                (
                
new  XElement( " product " ,
                
new  XElement( " name " " 产品4 " ),
                    
new  XElement( " num " " C004 " ),
                    
new  XElement( " price " 66 ),
                    
new  XElement( " total " 27 ),
                    
new  XElement( " description " " 产品4 " ))
                );

 

(九)产品列表

// 得到产品列表
var productList  =  from q  in  doc.Root
                 .Element(
" address " )
                 .Element(
" products " )
                 .Elements(
" product " )
                 select q;

 

            //这个列表如下:

            /************************************************

            Name  num       price   total       description           

            产品4 C004        66       27          产品4

            产品1 B001        12       20          产品1描述

            产品2 B002        16       22          产品2描述

            产品3 C003        18       108         产品3

            **************************************************/

(十)可以根据这个表进行linq查询 

// 查询产品总量
var iTotal  =  productList.Sum(p => ( int )p.Element( " total " ));

// 查询总价
var iTotalPrice  =  productList.Sum(q  =>  ( int )q.Element( " price " *  ( int )q.Element( " total " ));

// 查询描述是"产品3"的产品
var product3  =  from q  in  productList  where  ( string )q.Element( " description " ) ==   " 产品3 "  
               select 
new  product{ name = ( string )q.Element( " name " ),
                                   num
= ( string )q.Element( " num " ),
                                   price
= ( int )q.Element( " price " ),
                                   total
= ( int )q.Element( " total " ),
                                   description
= ( string )q.Element( " description " ),
                           };

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值