我正在使用包含类似于此的结构的
XML文档:
<MT> <Events> <event id="1"> <field name="blah" value="a_value" type="atype" /> . . . </event> </Events> </MT>
XmlDocument xdoc = new XmlDocument(); xdoc.Load("somefile.xml"); //Successfully loads btw
但是,当我尝试运行下一行代码时,我遇到了一个问题,只有这个特定的文档:
xdoc.SelectSingleNode("//event[@id='1']"); //This returns a 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和命名空间?如果有人知道可以发表评论,我会很感激.
原文地址:https://www.jb51.cc/csharp/243888.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。