(转)二、Linq to XML(更新,删除,加载)

原文地址:http://blog.csdn.net/avon520/article/details/5420

Xml操作


 

场景:产品采购单。


 

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


 

<?xml version="1.0" encoding="utf-8" standalone="no"?>


 

<purchaseOrder>


 

 <address>


 

    <city>石家庄</city>


 

    <call>88888888</call>


 

    <contact>暂无联系方式</contact>


 

    <opdate>2009-12-21</opdate>


 

    <products>


 

      <product>


 

        <name>产品4</name>


 

        <num>C004</num>


 

        <price>66</price>


 

        <total>27</total>


 

        <description>产品4</description>


 

      </product>


 

      <product>


 

        <name>产品1</name>


 

        <num>B001</num>


 

        <price>12</price>


 

        <total>20</total>


 

        <description>产品1描述</description>


 

      </product>


 

      <product>


 

        <name>产品2</name>


 

        <num>B002</num>


 

        <price>16</price>


 

        <total>22</total>


 

        <description>产品2描述</description>


 

      </product>


 

      <product>


 

        <name>产品3</name>


 

        <num>C003</num>


 

        <price>18</price>


 

        <total>108</total>


 

        <description>产品3</description>


 

      </product>


 

    </products>


 

 </address>


 

</purchaseOrder>


 

 


 

(一)更新


 

产品列表


 

//这个列表如下:


 

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


 

            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


 

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


 

采购单查询产品后,可以得到类似的一个产品列表。对照这个列表来进行查询可以更好的助于理解。


 

现在更新产品描述为产品3”的产品的单价(price),由18降低到17


 

//更新描述是"产品3"的产品,使它的单价由18降到17


 

            var willUpdateProduct = from q in productList


 

                                    where (string)q.Element("description") == "产品3"


 

                                    select q;


 

 


 

            XElement nowele = willUpdateProduct.First<XElement>();


 

            nowele.Element("price").SetValue(17);


 

说明:查询结果返回的应该是一个结果集,即使是聚合方法返回的也是一个结果集,只是结果集大多情况下只有一条而已。同理,对于linq to xml查询,返回的也是一个结果集。(说明一下,这里说是结果集,可能不严谨,暂且这样理解吧。)productList是什么?


 

var productList = from q in doc.Root.Element("address")


 

.Element("products")


 

.Elements("product")


 

select q;


 

productList是一个结果集,这个集合又是doc中的所有的product节点,对于对象来说,这个集是一个如产品列表一样的列表,唯有不同的是一个做为节点的元素来说的,而后一个则做为产品实体的属性来说的。


 

willUpdateProduct也是一个集,因为它是在产品集中进行检索,而检索的结果就是一个产品集,但对于linqtoxml来说,这个集是一个Xelement的集合。这里它检索的条件为产品描述为产品3”,它返回的结果只有一条,所以nowele就得到了这个对象,而这个对象就是Xelement类型。


 

然后通过SetValue方法来设定(更新)price的值。


 

(二)删除


 

在以上基础上,来删除这个元素(产品:产品3


 

nowele.Remove();


 

(三)加载doc文档


 

XDocument _doc = XDocument.Load("source/PurchaseOrder.xml");

156

 

 

posted on 2012-08-30 18:02  黑子范  阅读(177)  评论(0)    收藏  举报

导航