NodeList列出框显示

时间:2014-08-21 12:14:07

标签: 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名称的所有节点并将其放入列表中。当我将这些添加到标准列表框时,我看到显示:

System.Xml.XPathNodeList

作为参考,这个特定的xml看起来如此(它是更大部分的一部分):

 <pdml>
 <packet>
 <proto>
 <field name="ip.src" showname="Source: 192.168.1.204 (192.168.1.204)" size="4" pos="26" show="192.168.1.204" value="c0a801cc"/>
 </proto>
 </packet>
 </pdml>

如何将其转换为NodeList中包含的内容?

进一步的帮助: 另外我如何使用NodeList中包含的数据?例如我可以将其设置为唯一标识符并为其分配其他节点数据。

谢谢, 汤姆

3 个答案:

答案 0 :(得分:1)

我认为这是选项,但您必须创建列表&#34;显示&#34;:

XDocument xDoc = XDocument.Load("your xml file");
foreach (var elem in xDoc.Document.Descendants("field[@name='ip.src']"))
{
    shows.Add(elem.Attribute("show").Value);
}

答案 1 :(得分:0)

您必须将每个项目添加到列表而不是集合作为列表中的一个项目。由于列表只有一个类型为 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);

答案 2 :(得分:0)

node包含XmlAttribute的集合。我相信您打算将Value的每个属性添加到list.Items

foreach (XmlAttribute attribute in node)
{
    list.Items.Add(attribute.Value);
}

或者可能使用AddRange()方法和LINQ一次添加所有属性值:

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