SelectSingleNode() с ошибкой XPath C#

Я получил 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'],

Другие вопросы по тегам