C#操作XML文檔(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   strong   

XML文檔是一種通用的文檔,這種文檔既可以用.config作為尾碼也可以用.xml作為尾碼。XML文檔主要由元素節點和節點的屬性共同構成的。它有且僅有一個根節點,其他的節點全部都是根節點的子節點或者子子節點;每一個節點有開始就一定會有結束,不可能出現有開始無結束的節點,節點主要有兩種類型:有InnerText的<city>……</city>和沒有InnerText的<city……/>。在節點中含有屬性,一個節點可以含有多個屬性,每個屬性是由名字和值共同構成的。

在XML文檔中,節點、屬性都是區分大小寫。對於某個節點的屬性,Name是不能重複的,即使在定義屬性的時候,定義了兩個name完全相同的屬性,添加到同一個節點上面,後面的屬性會把前面的屬性覆蓋,不會報語法錯誤;對於某個節點下面的子節點,則可以添加多個完全相同的子節點。

對XML文檔的操作的前提是:XML文檔已經存在,並且根節點已經存在。

一、添加節點和屬性

1、定義一個XML的操作對象:

XmlDocument doc = new XmlDocument();

2、載入一個XML檔案:

doc.Load(@"D:\App.config");

指定的檔案一定要存在,否則會報錯的。

3、擷取根節點:

XmlNode root = doc.DocumentElement;

4、定義一個屬性:

XmlAttribute ra = doc.CreateAttribute("Name");

5、給屬性的值賦值:

ra.Value = "zwj2";

6、將屬性添加到節點上面:

root.Attributes.Append(ra);

7、再定義一個節點為根節點的子節點:

XmlNode root1 = doc.CreateElement("table");

8、給節點賦文本值:

root1.InnerText = "sdf1";

9、給節點定義並添加屬性

10、將該節點添加到父節點上去:

root.AppendChild(root1);

11、儲存XML文檔:

doc.Save(@"D:\App.config");

注意:可以對一個節點添加多個屬性,那麼各個屬性會依次往後排;可以給根節點添加多個子節點,也可以對子節點再添加多個子節點。

二、查詢和修改節點和屬性

1、元素結點有Name屬性,就是<>裡面的串,也有InnerText屬性(相當於文本結點),就是<></>之間的串:root.Name、root.InnerText。這些屬性都是可以讀寫的。------------------------------XmlNode

2、屬性結點有Name,也有Value:providerName="System.Data.SqlClient",前面為Name,後面為Value這些屬性既可讀也可寫。-----------------------------------------------------------XmlAttribute

3、每一個結點有子結點的集合,也有屬性的集合:root.ChildNodes、root.Attributes;集合都有count屬性。

4、集合都滿足索引:

對於屬性集合,屬性的name是不能重複的,所以索引可以是name字串索引,那麼name字串要存在,否則返回的是一個null屬性對象,不會報錯;也可以是整數索引,那麼此時的整數不能越界,否則是會報錯的;:root.Attributes["name"]、root.Attributes[0],返回XmlAttribute。

對於子節點的集合,因為子節點可以完全相同,那麼子節點的name肯定也可以相同,所以此時的索引只能是整數的,而不能是子節點name字串,整數索引也不能越界,否則會報錯: root.ChildNodes[10],返回XmlNode。

三、幾個重要的函數

1、XmlNode XmlDocument.SelectSingleNode(@"configuration/twoNode/dayStart")

這個函數是用一個聲明好的並且已經成功載入了某個設定檔的XmlDocument對象去調用SelectSingleNode函數;該函數的參數是設定檔中的從根節點名字開始一直往下最終到想要的節點的名字,整個名字路徑都不能出錯,注意是左斜杠;函數的傳回值是第一次找到的XmlNode節點的對象,如果找不到就會返回null。

操作如下xml:

<?xmlversion="1.0"?>

<configuration>

  <twoNode>

  </twoNode>

  <twoNode>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

  </twoNode> 

</configuration>

如果執行該函數,那麼將會找到節點:<dayStart>1</dayStart>

2、XmlNodeList XmlDocument.SelectNodes (@"configuration/twoNode/dayStart")

這個函數是用一個聲明好的並且已經成功載入了某個設定檔的XmlDocument對象去調用SelectNodes函數;該函數的參數是設定檔中的從根節點名字開始一直往下最終到想要的節點的名字,整個名字路徑都不能出錯,注意是左斜杠;因為節點的名字是可能重複的,所以函數的傳回值是找到的所有XmlNode節點對象的集合XmlNodeList,如果找不到就會返回null。

XmlNodeList是集合,那麼就有count屬性,可以直接對這個集合用[int index]來索引具體的對象,也可以用集合的Item(int index)函數來索引具體的對象,但是索引不能越界,否則會出錯,返回的是XmlNode。

操作如下xml:

<?xmlversion="1.0"?>

<configuration>

  <twoNode>

    <dayStart>-1</dayStart>

    <dayStart>-2</dayStart>

    <dayStart>-3</dayStart>

  </twoNode>

  <twoNode>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

  </twoNode> 

</configuration>

如果執行該函數,那麼將會找到節點集合:

    <dayStart>-1</dayStart>

    <dayStart>-2</dayStart>

<dayStart>-3</dayStart>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

<dayStart>3</dayStart>

 

操作如下xml:

<?xmlversion="1.0"?>

<configuration>

  <twoNode>

  </twoNode>

  <twoNode>

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

  </twoNode> 

</configuration>

如果執行該函數,那麼將會找到節點集合:

    <dayStart>1</dayStart>

    <dayStart>2</dayStart>

    <dayStart>3</dayStart>

 

註:轉載自csdn http://blog.csdn.net/zwj7612356/article/details/8183931

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.