c# – 为什么SelectSingleNode返回null?

我正在使用包含类似于此的结构的 XML文档:
<MT>
  <Events>
    <event id="1">
      <field name="blah" value="a_value" type="atype" />
      .
      .
      .
     </event>
   </Events>
 </MT>

我目前正以这种方式将文件文件加载到XML文档中:

XmlDocument xdoc = new XmlDocument();
xdoc.Load("somefile.xml");  //Successfully loads btw

但是,当我尝试运行下一行代码时,我遇到了一个问题,只有这个特定的文档:

xdoc.SelectSingleNode("//event[@id='1']"); //This returns a null

我是否在正确的轨道上猜测这是因为使用名为’id’的属性的问题或者我在代码中遗漏了某些内容而返回null?

解决方法

我不能使用XML文件复制它
<MT>
  <Events>
    <event id="1">
      <field name="blah" value="a_value" type="atype" />
     </event>
   </Events>
</MT>

代码

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\test.xml");

XmlNode node = doc.SelectSingleNode("//event[@id='1']");

这将按预期返回非null节点.

更新

在向< MT>添加xmlns =“example.org”之后我必须为XPath配置命名空间管理器并使用命名空间来处理事件.由于某种原因无法使认命名空间生效.

XmlDocument doc = new XmlDocument();
doc.Load(@"D:\test.xml");

XmlNamespaceManager manager = new XmlNamespaceManager(doc.NaMetable);
manager.AddNamespace("e","http://example.org");

XmlNode node = doc.SelectSingleNode("//e:event[@id='1']",manager);

试图让它发挥作用时,有一件事让我很困惑.为什么XmlNamespaceManager需要文档中的XmlNaMetable,如果不是为了找出它包含的命名空间?在,为什么我需要定义NaMetable和命名空间?如果有人知道可以发表评论,我会很感激.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...