Xml操作
场景:产品采购单。
描述:产品采购单用于描述产品的采购,它可以从各地进行采购,且每地可以采购多种商品。地址信息包括:城市,电话,联系人,日期,商品;商品包括0到多项,商品包括:产品名称,编号,描述,单价,采购总量。+
< 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
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是什么?
.Element( " products " )
.Elements( " product " )
select q;
productList是一个结果集,这个集合又是doc中的所有的product节点,对于对象来说,这个集是一个如产品列表一样的列表,唯有不同的是一个做为节点的元素来说的,而后一个则做为产品实体的属性来说的。
willUpdateProduct也是一个集,因为它是在产品集中进行检索,而检索的结果就是一个产品集,但对于linqtoxml来说,这个集是一个Xelement的集合。这里它检索的条件为产品描述为“产品3”,它返回的结果只有一条,所以nowele就得到了这个对象,而这个对象就是Xelement类型。
然后通过SetValue方法来设定(更新)price的值。
(二)删除
在以上基础上,来删除这个元素(产品:产品3)
nowele.Remove();
(三)加载doc文档