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

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

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

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

13.1、添加節點和屬性

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

XmlDocument doc = newXmlDocument();

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");

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

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

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

13.3、幾個重要的函數

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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章