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>
<name>産品1</name>
<num>B001</num>
<price>12</price>
<total>20</total>
<description>産品1描述</description>
<name>産品2</name>
<num>B002</num>
<price>16</price>
<total>22</total>
<description>産品2描述</description>
<name>産品3</name>
<num>C003</num>
<price>18</price>
<total>108</total>
<description>産品3</description>
</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");
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園