#c# #xml #selectsinglenode
#c# #xml #selectsinglenode
Вопрос:
я получил XML-файл в качестве экспорта из Wireshark и хочу выбрать номер фактического кадра
Структура этого файла выглядит следующим образом
<packet>
<proto>
...
</proto>
....
<proto>
<field name="frame.number" show="1">
</proto>
</packet>
<packet>
<proto>
...
</proto>
....
<proto>
<field name="frame.number" show="2">
</proto>
</packet>
…и так далее…
Я использую этот код для выбора пакетов / полей
XmlNodeList packages = xmlDoc.SelectNodes("//packet");
foreach (XmlNode packet in packages) {
string frameNumber = packet.SelectSingleNode("//field[@name='frame.number']").
Attributes["show"].Value;
Console.WriteLine(frameNumber);
}
Если я выполняю отладку с помощью кода, он всегда выбирает правильные узлы с правильными атрибутами. Но на каждой итерации выводится «1».
Кто-нибудь подозревает, что это за сбой? Я ничего не нашел в Интернете для этого сбоя
Большое вам спасибо!!
Ответ №1:
Это потому, что ваш XPath в SelectSingleNode
начинается с //
, что означает «начать с корня документа». Поэтому вы всегда получаете первый.
Просто измените XPath в этом методе на proto/field[@name='frame.number']
.
Комментарии:
1. Спасибо! Я думаю, что начинать с // означает: «начинать с фактического узла вниз. Теперь я знаю, что я был неправ 😉