2013-08-16 73 views
1

嘗試讀取每個端點元素中的每個單獨地址值,並在單獨的文本框中顯示每個地址值。嘗試讀取XML文件中的值

<client> 
    <endpoint address="http://127.0.0.1:" /> 
    <endpoint address="http://127.0.0.1:" /> 
    <endpoint address="net.tcp://127.0.0.1:" /> 
</client> 

我可以讀取XML數據並只顯示最後一個元素的值。這實際上是我第一次嘗試用C#開發任何東西。

下面是代碼的一點我已經寫:

 XmlReader ReadFile = XmlReader.Create(AgentConfig.FileName); 
     while (ReadFile.Read()) 
     { 
      if ((ReadFile.NodeType == XmlNodeType.Element) && (ReadFile.Name == "endpoint")) 
      { 
       if (ReadFile.HasAttributes) 
       { 
        textBox2.Text = ReadFile.GetAttribute("address"); 
        textBox3.Text = ReadFile.GetAttribute("address"); 
       } 
      } 
     } 

在我將尋找我自己的答案其間,但是任何輸入肯定受到讚賞! :)

+0

我建議尋找到的XDocument和LINQ to XML中的文本框 – TGH

+0

謝謝,我一定會讀到這個。 – bitbreaker

回答

3

使用LINQ to XML爲您提供更多方便:

var addresses = XDocument.Load(AgentConfig.FileName) 
          .Descendants("endpoint") 
          .Select(x => (string)x.Attribute("address")) 
          .ToList(); 

結果是List<string>,所以,你可以簡單地通過索引分配到你的文本框:

textBox1.Text = addresses[0]; 
textBox2.Text = addresses[1]; 
textBox3.Text = addresses[2]; 
+0

工作,謝謝! – bitbreaker

+0

另一個問題,如果你不介意 - 我會如何將數據保存到原始XML文件? – bitbreaker

+0

@bitbreaker:最好你可以詳細詢問另一個問題,而不是回答評論 –

0

我可以讀取XML數據並僅顯示最後一個元素的值。

由於您正在覆蓋自己的值,因此您正面臨此行爲。如果要追加你需要改變它像這樣

StringBuilder sb = new StringBuilder(); //before while loop 
StringBuilder sb1 = new StringBuilder(); //before while loop 
XmlReader ReadFile = XmlReader.Create(AgentConfig.FileName); 
    while (ReadFile.Read()) 
    { 
     if ((ReadFile.NodeType == XmlNodeType.Element) && (ReadFile.Name == "endpoint")) 
     { 
      if (ReadFile.HasAttributes) 
      { 
       sb.Append(ReadFile.GetAttribute("address") + " "); 
       sb1.Append(ReadFile.GetAttribute("address") + " "); 

      } 
     } 
    } 

//Then after your loop 
textBox2.Text = sb.ToString(); 
textBox3.Text = sb1.ToString(); 
+0

感謝您的意見! – bitbreaker

0

您可以添加地址屬性添加到列表最後定像下面

List<string> addresses = new List<string>(); 
XmlReader ReadFile = XmlReader.Create(AgentConfig.FileName); 
while (ReadFile.Read()) 
{ 
    if ((ReadFile.NodeType == XmlNodeType.Element) && (ReadFile.Name == "endpoint")) 
    { 
     if (ReadFile.HasAttributes) 
     { 
      addresses.Add(ReadFile.GetAttribute("address")); 
     } 
    } 
} 
if (addresses.Count >0) 
{ 
    textBox1.Text = addresses[0]; 
} 
if (addresses.Count >= 1) 
{ 
    textBox2.Text = addresses[1]; 
}