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

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

0 голосов
/ 20 октября 2011

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

... и такon ...

Я использую этот код для выбора пакетов / полей

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 Ответ

2 голосов
/ 20 октября 2011

Это потому, что ваш XPath в SelectSingleNode начинается с // - что означает «начать с корня документа». Поэтому вы всегда получаете первый.

Просто измените XPath в этом методе на proto/field[@name='frame.number'].

...