zoukankan      html  css  js  c++  java
  • (转)一、Linq to XML (创建,添加,查询)

    原文地址:

    http://blog.csdn.net/avon520/article/details/5420105

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

  • 相关阅读:
    poj1417(带权并查集+背包DP+路径回溯)
    poj1182(带权并查集)
    hdoj3038(带权并查集)
    poj1611(并查集简单应用)
    poj2236(并查集)
    莫队板子,例题
    离散化二维坐标
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    树链剖分板子
    P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
  • 原文地址:https://www.cnblogs.com/fcsh820/p/2664202.html
Copyright © 2011-2022 走看看