C# 操作XML之讀取Xml淺析
C# 操作XML之讀取Xml的作用:如果我們有現成的Xml文檔,那么,我們怎么取到我們感興趣的值呢?
還是以上邊的文檔為例,我們看到根節點下邊有兩個節點,它們的名字都是Game,那么用節點的名稱,我們是無法分辨出哪一個節點是“文明3”,哪一個節點是“帝國時代”的!!!
那么,當我想知道“文明3”的價格時,就應該使用Xml文檔對象下的SelectSingleNode方法。
C# 操作XML之讀取Xml的這個方法有兩個重載的版本
◆一個是當Xml文檔沒有命名空間時使用的,一個參數SelectSingleNode(string xpath)直接傳入xpath即可。
◆另一個是當Xml文檔有命名空間時使用的,兩個參數SelelctSingleNode(string xpath,XmlNamespaceManager nsmgr),***個參數還是xpath,第二個參數是XmlNamespaceManager對象,由于我們的Xml是有命名空間的,所以我們要使用第二種方法!首先我們要建立一個XmlNamespaceManager對象,建立的方法為XmlNamespaceManager nsmgr = new XmlNamespaceManager(new XmlDocument().NameTable);建立完對象后,我們就要開始為nsmgr增加我們的命名空間了(注意,這里加的命名空間要與Xml實際的相對應,但前輟名可不同),增加的方法如下:nsmgr.AddNamespace("v","www-shop-game"),好了,準備工作完成了,現在可以使用SelectSingleNode方法了
- string price = xml.SelectSingleNode(
- "v:Games/v:Game[@name='文明3']/Price",nsmgr).InnerText
請注意,如果Xml文檔里沒有明確指出當前節點的命名空間,那么當前節點的命名空間繼承其父節點的命名空間
假設我們剛才生成的Xml文檔已存在D:\Xml目錄下了,文件的名字就叫sellgame.xml,完整的代碼如下:
- XmlDocument xml = new XmlDocument();
- xml.Load("D:\\Xml\\sellgame.xml")
- XmlNamespaceManager nsmgr =
- new XmlNamespaceManager(new XmlDocument().NameTable);
- //建立Xml命名空間管理器對象
- nsmgr.AddNamespace("v","www-shop-game");
- //增加命名空間 ,C# 操作XML之讀取Xml
- string price = xml.SelectSingleNode(
- "v:Games/v:Game[@name='文明3']/Price",nsmgr).InnerText;
- //取得相應的節點值
現在,如果這家軟件經銷商加增加一種新的產品:文明3的典藏版!那么我們的Xml文檔就要進行相應的擴充了:
- ﹤?xml version="1.0" encoding="utf-8" ?﹥
- ﹤v:Games xmlns:v="www-shop-game"﹥
- ﹤v:Game name="文明3" type="standard"﹥
- ﹤Price﹥100﹤/Price﹥
- ﹤/Game﹥ //C# 操作XML之讀取Xml
- ﹤v:Game name="文明3" type="classic"﹥
- ﹤Price﹥500﹤/Price﹥
- ﹤/Game﹥
- ﹤v:Game name="帝國時代"﹥
- ﹤Price﹥200﹤/Price﹥
- ﹤/Game﹥
- ﹤/Games﹥
這時當我們想要取到全部與“文明3”有關的節點時,該如何進行呢?我們可以使用SelectNodes方法,該方法大體上與SelectSingleNode方法一樣,也是兩次重載,但此方法返回一個XmlNodeList對象,即一個XmlNode數組
C# 操作XML之讀取Xml的實現:當我們想要取到全部與“文明3”有關的節點時,可以這樣:
- XmlNamespaceManager nsmgr =
- new XmlNamespaceManager(
- new XmlDocument().NameTable);
- //建立Xml命名空間管理器對象
- nsmgr.AddNamespace("v","www-shop-game");
- //增加命名空間 ,C# 操作XML之讀取Xml
- XmlNodeList nodeList = xml.SelectNodes(
- "v:Games/v:Game[@name='文明3']/Price",nsmgr);
- //取得相應的節點數組
當我們要取節點的屬性值及節點的值時,都可以使用InnerText這個屬性。
C# 操作XML之讀取Xml的操作就向你介紹到這里,希望對你了解和學習C# 操作XML之讀取Xml有所幫助。
【編輯推薦】