尝试读取每个端点元素中的每个单独的地址值,并在单独的文本框中显示每个单独的地址值。
<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 :(得分: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];
}