1. 程式人生 > >C#解析讀取XML檔案,並且對XML檔案進行操作

C#解析讀取XML檔案,並且對XML檔案進行操作

如果不懂XML文件結構,請點選移步這裡

在綜合搜尋了網上的文章之後發現,有很多文章的講解博主看的一知半解,並且有些方法已經找不到了,所以就有了自己整理一下學習成果,同時通過部落格共享成果

目前還在學習中,先佔坑,後續補上

經過昨天的實驗和測試,補上C#XML的資訊讀取操作

嗯,排版什麼的,都是浮雲,請各位直接忽略(/捂臉)

下面是測試的XML內容

<?xml version =“1.0”encoding =“utf-8”?> 
<library id =“30”>   
<BOOK id =“20”>     
<name id =“50”txt =“科目”>高等數學</ name>     
<name1>大學英語</ name1>   
<first id =“10”txt =“這是節點麼”/>
</ BOOK> 

</ library>

先需要引用明明空間的的的System.Xml

XmlDocument x = new XmlDocument(); 
x.LoadXml(/ *載入的XML檔案* /); //載入xml文件,就是這麼簡單

<標籤屬性=“值”>值<標籤/>這是元素,對應於

XmlDocument裡面的Node,x.DocumentElement.FirstChild就是根節點,也就是第一個子節點,節點可以包含很多子節點,但是根節點只有一個

如果xml文件有<?xml version =“1.0”encoding =“utf-8”?>這樣的字元,那麼x.FirstChild就指的是這個xml,如果沒有,那麼就是指的根節點
有興趣的同學可以自己列印試一下

        x = new XmlDocument();
        x.LoadXml(a.ToString());
        Debug.Log(x.InnerXml);
        XmlNodeReader xmlNode = new XmlNodeReader(x.GetElementsByTagName("library")[0]);
        Debug.Log(x.ChildNodes.Count);//列印子節點數量
        Debug.Log(x.ChildNodes[1].Name);//列印節點名稱
        Debug.Log(xmlNode.MoveToContent());//如果有下一個節點,直接指向下一個節點
        Debug.Log(xmlNode.AttributeCount);//列印屬性數量
        Debug.Log(xmlNode.MoveToAttribute("id"));//獲取該屬性節點的值
        Debug.Log(xmlNode.Value);//列印獲取值
        Debug.Log(x.GetElementsByTagName("library")[0].Name);//列印節點名稱
        Debug.Log(x.GetElementsByTagName("library")[0].Attributes["id"].Value);//列印節點屬性值
        Debug.Log(x.GetElementsByTagName("name")[0].InnerText);//列印節點值
        Debug.Log(x.GetElementsByTagName("name")[0].Attributes.Count);//列印屬性數量
        Debug.Log(x.GetElementsByTagName("name")[0].Attributes["txt"].Value);//列印屬性值
        Debug.Log(x.DocumentElement.Name);
        Debug.Log(x.DocumentElement.FirstChild.Name);
        XmlNodeList nodeList = x.DocumentElement.FirstChild.ChildNodes;
        foreach (XmlElement xe in nodeList)
        {
            Debug.Log(xe.InnerText);
            if (xe.HasAttributes)
            {
                Debug.Log(xe.Attributes.Count);
                for (int i = 0; i < xe.Attributes.Count; i++)
                    Debug.Log(xe.Attributes[i].Name);
                Debug.Log(xe.Attributes["id"].Value);
                Debug.Log(xe.Attributes["txt"].Value);
            }
        }

哈,上面的程式碼中,有些可以直接通過的foreach迴圈操作

不過,神奇的是<標籤屬性=“值”/>這樣也算作一個節點,一樣可以通過上面的方法讀取

通過程式碼操作XML的方法,隨後再補充吧

補充通過程式碼生成xml文件的方式

        x = new XmlDocument();//建立一個xml文件
        XmlElement element = x.CreateElement("aaaa");//生成元素
        element.InnerText = "hsdf";//元素值
        XmlAttribute attribute = x.CreateAttribute("attribute");//生成屬性
        attribute.Value = "ooooo";//設定屬性值
        element.SetAttributeNode(attribute);//設定元素屬性
        XmlNode node = x.CreateNode(XmlNodeType.Element, "test", "");//生成節點
        node.AppendChild(element);//新增節點
        x.AppendChild(node);//新增節點
        x.Save(@"G:/JoSing/test.xml");//儲存檔案

<test><aaaa attribute="ooooo">hsdf</aaaa></test>

最後,這是程式碼生成的xml字串

寫了這麼多程式碼,最後只得到這麼點東西,好像有點對不起辛苦勞動。。。