我正在处理一个 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']");
这将按预期返回一个非空节点。
更新
添加一个xmlns="example.org"
之后到 <MT>
元素,我必须为 XPath 配置 namespace 管理器并为事件使用 namespace 。由于某种原因无法使默认命名空间工作。
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);
在尝试让它工作时,有一件事让我感到困惑。如果不是为了找出它包含的 namespace ,为什么 XmlNamespaceManager 需要文档中的 XmlNameTable?比如,为什么我需要定义 NameTable 和 命名空间?如果知道的人可以发表简短评论,我将不胜感激。
关于c# - 为什么 SelectSingleNode 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/809496/