В настоящее время у меня проблема с отправкой результатов 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? например, я могу установить его как уникальный идентификатор и назначить ему другие данные узла.
Спасибо, Том
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);
Я думаю, что это вариант, но вам нужно создать список "показов":
XDocument xDoc = XDocument.Load("your xml file");
foreach (var elem in xDoc.Document.Descendants("field[@name='ip.src']"))
{
shows.Add(elem.Attribute("show").Value);
}
Вы должны добавить каждый элемент в список, а не коллекцию, как один элемент в списке. Поскольку в списке есть только один элемент типа XmlNodeList, он вызывает ToString для этого объекта, и это приводит к сообщению System.Xml.XPathNodeList. Вы должны использовать list.Items.AddRange
если он существует (непонятно, какую инфраструктуру пользовательского интерфейса вы используете), или вы должны перебирать коллекцию 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);
XmlAttribute
сам по себе его Value
должно быть добавлено в Items
: list.Items.Add(node.Value)