gpt4 book ai didi

c# - 为什么 SelectSingleNode 返回 null?

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:55 24 4
gpt4 key购买 nike

我正在处理一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com