一、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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值