我目前在使用以下代码将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中包含的数据?例如我可以将其设置为唯一标识符并为其分配其他节点数据。
谢谢, 汤姆
答案 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);