为什么SelectSingleNode返回null?

我正在使用包含类似于此的结构的XML文档:

    . . .    

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

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

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

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

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

我不能使用XML文件复制它

        

和代码

 XmlDocument doc = new XmlDocument(); doc.Load(@"C:\test.xml"); XmlNode node = doc.SelectSingleNode("//event[@id='1']"); 

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

更新

在向元素添加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 命名空间? 如果有人知道可以发表简短评论,我会很感激。