2011-10-20 83 views
0

我有一个XML文件从Wireshark的出口,并要选择的实际帧的SelectSingleNode()使用XPath C#失败

此文件的结构的数量是这样

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

有没有人怀疑这是什么故障?我在互联网上没有发现任何此类故障

非常感谢!

回答

2

这是因为您的0123ath中的XPath以//开头 - 表示“从文档的根开始”。因此,你总是获得第一个。

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

+0

谢谢!我开始用//意味着:“从实际节点向下开始。 现在我知道了,我错了;) – Benni