有些時候我們需要生成一個xml文檔作為資料交換的容器。當然我們用拼接字元串的方法來進行建構xml,但是這種方法雖然簡單有效,但是如果xml文檔結構過于複雜,拼接字元串會讓人眼花缭亂。這時候就需要C#給我們提供現成的類庫,以供我們自由的建立xml文檔。
比如我們要建立如下的xml文檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code><code>?></code>
<code><</code><code>ns0:Z_AVS_UPLOAD_WEIGHT_Request</code> <code>xmlns:ns0</code><code>=</code><code>"http://schemas.microsoft.com/BizTalk/2003"</code><code>> </code>
<code> </code><code><</code><code>ZWERKS</code><code>>ZFM1</</code><code>ZWERKS</code><code>></code>
<code> </code><code><</code><code>TAB1</code><code>></code>
<code> </code><code><</code><code>ZNO</code><code>>13022101</</code><code>ZNO</code><code>></code>
<code> </code><code><</code><code>ZORDER</code><code>>2013238955</</code><code>ZORDER</code><code>></code>
<code> </code><code><</code><code>ZWEIGHT</code><code>>4140</</code><code>ZWEIGHT</code><code>></code>
<code> </code><code></</code><code>TAB1</code><code>></code>
<code> </code><code><</code><code>ZORDER</code><code>>2013239627</</code><code>ZORDER</code><code>></code>
<code></</code><code>ns0:Z_AVS_UPLOAD_WEIGHT_Request</code><code>></code>
選取這樣的結構,一方面是因為它來自于論壇某位壇友實際的需求,另一方面它足夠簡單卻有代表性。
下面我将以這個例子用兩種方法(XmlDocument和Linq to XML)進行講解。
1、XmlDocument
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<code>XmlDocument document = </code><code>new</code> <code>XmlDocument();</code>
<code> </code>
<code>XmlDeclaration declaration = document.CreateXmlDeclaration(</code><code>"1.0"</code><code>, </code><code>"UTF-8"</code><code>, </code><code>""</code><code>);</code><code>//xml文檔的聲明部分</code>
<code>document.AppendChild(declaration);</code>
<code>XmlElement root = document.CreateElement(</code><code>"ns0"</code><code>, </code><code>"Z_AVS_UPLOAD_WEIGHT_Request"</code><code>, </code><code>"http://schemas.microsoft.com/BizTalk/2003"</code><code>);</code>
<code>document.AppendChild(root);</code>
<code>XmlElement zwerks = document.CreateElement(</code><code>"ZWERKS"</code><code>);</code>
<code>zwerks.InnerText = </code><code>"ZFM1"</code><code>;</code>
<code>root.AppendChild(zwerks);</code>
<code>XmlElement tab1 = document.CreateElement(</code><code>"TAB1"</code><code>);</code>
<code>root.AppendChild(tab1);</code>
<code>XmlElement zno = document.CreateElement(</code><code>"ZNO"</code><code>);</code>
<code>zno.InnerText = </code><code>"13022101"</code><code>;</code>
<code>tab1.AppendChild(zno);</code>
<code>XmlElement zorder = document.CreateElement(</code><code>"ZORDER"</code><code>);</code>
<code>zorder.InnerText = </code><code>"2013238955"</code><code>;</code>
<code>tab1.AppendChild(zorder);</code>
<code>XmlElement zweight = document.CreateElement(</code><code>"ZWEIGHT"</code><code>);</code>
<code>zweight.InnerText = </code><code>"4140"</code><code>;</code>
<code>tab1.AppendChild(zweight);</code>
<code>XmlElement tab2 = document.CreateElement(</code><code>"TAB1"</code><code>);</code>
<code>root.AppendChild(tab2);</code>
<code>XmlElement zno2 = document.CreateElement(</code><code>"ZNO"</code><code>);</code>
<code>zno2.InnerText = </code><code>"13022101"</code><code>;</code>
<code>tab2.AppendChild(zno2);</code>
<code>XmlElement zorder2 = document.CreateElement(</code><code>"ZORDER"</code><code>);</code>
<code>zorder2.InnerText = </code><code>"2013238955"</code><code>;</code>
<code>tab2.AppendChild(zorder2);</code>
<code>XmlElement zweight2 = document.CreateElement(</code><code>"ZWEIGHT"</code><code>);</code>
<code>zweight2.InnerText = </code><code>"4140"</code><code>;</code>
<code>tab2.AppendChild(zweight2);</code>
<code>document.Save(</code><code>"test.xml"</code><code>);</code><code>//将生成好的xml儲存到test.xml檔案中</code>
2、Linq to XML
<code>XDocument document = </code><code>new</code> <code>XDocument();</code>
<code>document.Declaration = </code><code>new</code> <code>XDeclaration(</code><code>"1.0"</code><code>, </code><code>"UTF-8"</code><code>, </code><code>""</code><code>);</code>
<code> </code>
<code>XNamespace ns = </code><code>"http://schemas.microsoft.com/BizTalk/2003"</code><code>;</code>
<code>XElement root = </code><code>new</code> <code>XElement(ns + </code><code>"Z_AVS_UPLOAD_WEIGHT_Request"</code><code>,</code>
<code> </code><code>new</code> <code>XAttribute(XNamespace.Xmlns + </code><code>"ns0"</code><code>, </code><code>"http://schemas.microsoft.com/BizTalk/2003"</code><code>));</code>
<code>root.Add(</code><code>new</code> <code>XElement(</code><code>"ZWERKS"</code><code>, </code><code>"ZFM1"</code><code>),</code>
<code> </code><code>new</code> <code>XElement(</code><code>"TAB1"</code><code>,</code>
<code> </code><code>new</code> <code>XElement(</code><code>"ZNO"</code><code>, 13022101),</code>
<code> </code><code>new</code> <code>XElement(</code><code>"ZORDER"</code><code>, 2013238955),</code>
<code> </code><code>new</code> <code>XElement(</code><code>"ZWEIGHT"</code><code>, 4140)),</code>
<code> </code><code>new</code> <code>XElement(</code><code>"ZWEIGHT"</code><code>, 4140))</code>
<code> </code><code>);</code>
<code>document.Add(root);</code>
<code>document.Save(</code><code>"test.xml"</code><code>);</code><code>//儲存xml到檔案</code>
可以發現Linq to XML的方法比較簡潔,代碼量也足夠小。當然了XmlDocument的方法可以進一步的簡化,這裡重點展示一下Linq to XML的魅力。
本文轉自 guwei4037 51CTO部落格,原文連結:http://blog.51cto.com/csharper/1345986