使用XPath c#错误选择tsinglenode()

本文关键字:tsinglenode 选择 错误 XPath 使用 | 更新日期: 2023-09-27 18:12:06

我从Wireshark导出了一个XML文件,想要选择实际帧的编号

这个文件的结构是这样的

<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"。

有人怀疑这是什么失败吗?我在网上找不到任何关于这个失败的信息

非常感谢!

使用XPath c#错误选择tsinglenode()

这是因为您的XPath在SelectSingleNode中以//开头-这意味着"从文档的根开始"。所以你总是得到第一个。

只需将该方法中的XPath改为proto/field[@name='frame.number']