1

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

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

与此同时,我将自己寻找答案,但任何输入都将不胜感激!:)

4

3 回答 3

3

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

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

结果是List<string>,因此,您可以简单地通过索引分配到您的 TextBoxes 中:

textBox1.Text = addresses[0];
textBox2.Text = addresses[1];
textBox3.Text = addresses[2];
于 2013-08-16T04:47:24.663 回答
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();
于 2013-08-16T04:47:41.430 回答
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];
}
于 2013-08-16T04:50:26.667 回答