加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – XML SelectNode()不返回任何内容.名称空间为何重要?

发布时间:2020-12-16 01:53:57 所属栏目:百科 来源:网络整理
导读:我有代码来获取根元素的节点: xmlNodes = rootElement.SelectNodes("DefinitionName"); 它不会返回存在的节点.在调试器中,我可以扩展rootElement以查找DefinitionName.显然问题是文件定义了一个命名空间(参见下面的XML). MSDN说我必须做这样的事情才能让节
我有代码来获取根元素的节点:

xmlNodes = rootElement.SelectNodes("DefinitionName");

它不会返回存在的节点.在调试器中,我可以扩展rootElement以查找DefinitionName.显然问题是文件定义了一个命名空间(参见下面的XML). MSDN说我必须做这样的事情才能让节点返回:

注意:这与我的代码无关.这是来自MSDN的示例:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab","http://www.lucernepublishing.com");
XmlNodeList nodelist = doc.SelectNodes("//ab:book",nsmgr);

我有两个问题:

>为什么名称空间很重要?如果我想要一个节点,并且存在,请将它交给我.
>我的应用处理许多XML文件.我该如何指定命名空间(nsmgr.AddNamespace())?我需要解析文件才能获得第一个吗?

我情不自禁地感觉到我正在采取长期,充满焦虑的方式来做这件事.

这是XML:

<?xml version="1.0" encoding="utf-8"?>
    <SessionStateInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
    z:Id="1" z:Type="Company.Apps.MoreHere.Session.SessionStateInfo"
    z:Assembly="assembly info here"
    xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"
    xmlns="http://schemas.datacontract.org/2004/07/MoreHere.Session">
      <CoaterNumber>25</CoaterNumber>
      <DefinitionName z:Id="2">Two Line</DefinitionName>
      <EnableManualMode>true</EnableManualMode>

解决方法

<SessionStateInfo ....
    xmlns="http://schemas.datacontract.org/2004/07/MoreHere.Session">

表示此元素及其所有后代位于http://schemas.datacontract.org/2004/07/MoreHere.Session命名空间中.由于XPath中未加前缀的名称始终引用无命名空间中的元素,因此您需要将此URI绑定到前缀并在XPath中使用该前缀,即使文档中没有使用前缀.

XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("mhs","http://schemas.datacontract.org/2004/07/MoreHere.Session");
xmlNodes = rootElement.SelectNodes("mhs:DefinitionName",nsmgr);

如果您知道您要查找的元素将始终具有相同的本地名称,但可能有也可能没有命名空间(或者可能具有不同的命名空间),那么您可以使用XPath等技巧

rootElement.SelectNodes("*[local-name() = 'DefinitionName']");

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读