尝试从XML文件中读取值

时间:2013-08-16 04:40:44

标签: c# xml-parsing

尝试读取每个端点元素中的每个单独的地址值,并在单独的文本框中显示每个单独的地址值。

<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");
                }
            }
        }

与此同时,我将自己寻找答案,但任何输入肯定会受到赞赏! :)

3 个答案:

答案 0 :(得分:3)

使用LINQ to XML对您的情况更方便:

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

结果是List<string>,因此,您只需通过索引分配到TextBox中:

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

答案 1 :(得分: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();

答案 2 :(得分: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];
}