2011-01-21 117 views
4

我的方法:循環通過XML文檔


if (File.Exists(@"C:\config.xml")) 
    { 
    System.Xml.XmlDocument xd = new System.Xml.XmlDocument(); 
    xd.Load(@"C:\config.xml"); 
    System.Xml.XmlElement root = xd.DocumentElement; 
    System.Xml.XmlNodeList nl = root.SelectNodes("/config"); 
    foreach (System.Xml.XmlNode xnode in nl) 
    { 
     string name = xnode.Name; 
     string value = xnode.InnerText; 
     string nv = name + "|" + value; 
     Send(nv); 
     }

我的XML文檔

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<config> 
<bla>D</bla> 
<def>300</def> 
<ttOUT>34000</ttOUT> 
<num>3800</num> 
<pw>help</pw> 
<err>1</err> 
....and so on 
</config> 

現在我的方法返回第2,沒有別的。 我在做什麼錯?

+0

你說它返回前兩個,你的意思是``和``? – 2011-01-21 09:33:27

+0

您可能指向未保存的測試文件... – 2011-01-21 09:33:28

回答

15

useSystem.Xml命名空間,以避免長時間型資格即...

using System.Xml; 

然後嘗試這樣的事情..

XmlNodeList nl = xd.SelectNodes("config"); 
    XmlNode root = nl[0]; 

    foreach (XmlNode xnode in root.ChildNodes) 
    { 
     string name = xnode.Name; 
     string value = xnode.InnerText; 
     string nv = name + "|" + value; 
     Send(nv); 
    } 

我相信有你的方法有問題。

a)我不認爲SelectNodes應該採取/config的說法,而應該採取config

b)選擇第一個(且只有 - .Net中的XML文件必須只有一個根節點)根節點後,需要遍歷根的ChildNodes

1

root是< config>標記,所以我不明白root.SelectNodes(「/ config」)應該如何工作。改爲使用root.Childnodes。