天天看點

Linq to XML說法——(二)更新,删除,加載

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>

轉載請注明:部落格園