C# 列表框显示的节点列表

C# 列表框显示的节点列表,c#,xml,xpath,C#,Xml,Xpath,我目前在使用下面的代码将xmlnodelist的结果放入普通列表框时遇到问题 var xmlDoc = new XmlDocument(); xmlDoc.Load(textBox1.Text); var node = xmlDoc.SelectNodes("pdml/packet/proto/field[@name='ip.src']/@show"); list.Items.Add(node); 据我所知,SelectNodes将获取所有具有该XPath名称的节点,并将其放入列表中。当我将

我目前在使用下面的代码将xmlnodelist的结果放入普通列表框时遇到问题

var xmlDoc = new XmlDocument();
xmlDoc.Load(textBox1.Text);

var node = xmlDoc.SelectNodes("pdml/packet/proto/field[@name='ip.src']/@show");
list.Items.Add(node);
据我所知,SelectNodes将获取所有具有该XPath名称的节点,并将其放入列表中。当我将这些添加到标准列表框时,我会看到显示:

System.Xml.XPathNodeList
作为参考,此特定xml看起来是这样的(它是更大部分的一部分):


如何将其转换为节点列表中包含的内容

进一步帮助: 还有,如何处理节点列表中包含的数据?e、 g.我可以将其设置为唯一标识符,并为其分配其他节点数据

谢谢,
Tom

您必须将每个项目添加到列表中,而不是将集合作为列表中的一个项目。由于列表只有一个类型为XmlNodeList的项,因此它调用该对象上的ToString,并生成System.Xml.XPathNodeList消息。如果存在
list.Items.AddRange
(不清楚您使用的是什么UI框架),则应使用它,或者应迭代XmlNodeList集合:

var xmlDoc = new XmlDocument();
xmlDoc.Load(textBox1.Text);

var nodes = xmlDoc.SelectNodes("pdml/packet/proto/field[@name='ip.src']/@show");
foreach(var node in nodes)
    list.Items.Add(node);

节点
包含
xmldattribute
的集合。我相信您的意思是将每个属性的
值添加到
列表中。项目

foreach (XmlAttribute attribute in node)
{
    list.Items.Add(attribute.Value);
}
或者可能使用
AddRange()
方法和LINQ一次添加所有属性值:

list.Items.AddRange(from XmlAttribute attribute in node select attribute.Value);

我认为这是一个选项,但您必须创建列表“显示”:


你想从每个要列出的“字段”中获取所有数据吗?我想获取的数据是:192.168.1.204。但是从xml文档中的每个字段都可以看到这个XPath。谢谢您的回复。当我输入上面的代码时,它返回:System.Xml.xmldattribute。仍然没有数据。如我在回答中所述,它的
值应该添加到
项中,而不是
xmldattribute
本身:
list.Items.Add(node.Value)
感谢您的回复,这可能适用于上面的数据包示例,但完整版本有大约40或50个“字段”,其中很多还包含“show”属性。再次感谢您的快速回复。它适用于此xml中的所有元素“field;”)不仅仅是一个抱歉,这意味着这些其他“字段”和“显示”包含关于不需要的不同数据的信息。您可以添加.Contains()方法以仅使用ip.src;)获取如果愿意,请立即尝试;)别忘了接受回答:对不起,我没有意识到我必须这么做。我也会投票,但还不够,哈哈。
list.Items.AddRange(from XmlAttribute attribute in node select attribute.Value);
XDocument xDoc = XDocument.Load("your xml file");
foreach (var elem in xDoc.Document.Descendants("field[@name='ip.src']"))
{
    shows.Add(elem.Attribute("show").Value);
}