2013-08-16 46 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]; 
}