Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择SingleNode and namespace-can';t查找节点(使用命名空间管理器)_C#_Xml_Selectsinglenode - Fatal编程技术网

C# 选择SingleNode and namespace-can';t查找节点(使用命名空间管理器)

C# 选择SingleNode and namespace-can';t查找节点(使用命名空间管理器),c#,xml,selectsinglenode,C#,Xml,Selectsinglenode,我从一家合作公司收到一条相对复杂的xml消息。我需要解析xml以使用它。我的SelectSingleNode命令工作正常,然后他们更改了所有消息,现在我的SelectSingleNode命令都无法工作 信息的结构。请注意带有嵌入式xml文档的CDATA对象。我不确定这是否重要。我能够挤出dataContent对象,所以它不会有什么区别。以下是我正在加载到XmlDocument中的内容: <ns5:dataContent xmlns:ns2="http://test/common/v1"

我从一家合作公司收到一条相对复杂的xml消息。我需要解析xml以使用它。我的SelectSingleNode命令工作正常,然后他们更改了所有消息,现在我的SelectSingleNode命令都无法工作

信息的结构。请注意带有嵌入式xml文档的CDATA对象。我不确定这是否重要。我能够挤出dataContent对象,所以它不会有什么区别。以下是我正在加载到XmlDocument中的内容:

<ns5:dataContent xmlns:ns2="http://test/common/v1" 
                     xmlns="http://test/schema/common" 
                     xmlns:ns4="http://test/credentialing/stuff/v1" 
                     xmlns:ns3="http://test/schema/ims/common/v1" 
                     xmlns:ns5="http://test/schema/v1">

        <createdBy>Micky</createdBy>
        <createdAt>2011-03-08T17:00:27.050-05:00</createdAt>
        <ns5:Id>39</ns5:Id>
        <ns5:Type>4</ns5:Type>
     -- lots more data --
</ns5:dataContent>
我可以看到xmlDoc正在正确加载。我已经尝试将所有6个名称空间添加到xmlNsM,但得到了相同的结果。我的SelectSingleNodes现在都无法工作


我在这个主题上找到的每一篇文章都说只使用名称空间管理器,但我已经知道这不是一个非常有成效的下午

只要阅读代码,我认为您使用的名称空间管理器是正确的。您的问题是XPath查询。“ns5:Id”不是高级文档的子级,ChildNodes只返回一级。你需要搜索死者。尝试:

var root = doc.DocumentElement;
var ID = root.SelectSingleNode("//ns5:Id", xmlNsM); 
这不是最有效的,因为它将在整个文档中找到所有匹配项。看看这里的一些例子:

@ErnieL答案看起来不错(+1)。这也可能是一个问题

  xmlNsM.AddNamespace(String.Empty, @"http://test/schema/common\");
因为:-(。如果@ErnieL答案仍然不起作用,请将其更改为

  xmlNsM.AddNamespace("default", @"http://test/schema/common\");

通常情况下,经过数小时和数小时的研究,解决方案很简单。我添加到NSManager的名称空间在结束引号前有一个正斜杠(“http://test/schema/v1\")。当然,这是一个分隔符,但因为我只是从包含它的原始xml中复制并粘贴了名称空间。一旦删除了它们,我就开始在ns5名称空间中查找所需的所有字段


由于某种原因,我看不到没有名称空间的元素,但由于我不需要这些字段,我将在稍后找出答案。

您到底在
XmlDocument
中加载了什么?只有CDATA内容?如果是,请编辑您的问题以消除无关的XML。
  xmlNsM.AddNamespace("default", @"http://test/schema/common\");