如何使用c#从xml获取节点-我做错了什么?

如何使用c#从xml获取节点-我做错了什么?,c#,xml,soap,C#,Xml,Soap,名称空间和XML仍然让我非常困惑 这是我的XML(来自SOAP请求) 但是SelectSingleNode返回null。我尝试了一些不同的变化,但没有得到任何工作。我不明白什么?您可以使用LINQ to XML获得结果,还可以指定名称空间 XDocument document = XDocument.Load("test.xml"); XNamespace ns = "http://tempuri.org/XMLSchema.xsd"; var test = document.Descendan

名称空间和XML仍然让我非常困惑

这是我的XML(来自SOAP请求)


但是SelectSingleNode返回null。我尝试了一些不同的变化,但没有得到任何工作。我不明白什么?

您可以使用LINQ to XML获得结果,还可以指定名称空间

XDocument document = XDocument.Load("test.xml");
XNamespace ns = "http://tempuri.org/XMLSchema.xsd";
var test = document.Descendants(ns + "Foo").FirstOrDefault();
或者,如果不想指定命名空间,则:

var test2 = document.Descendants()
                    .Where(a => a.Name.LocalName == "Foo")
                    .FirstOrDefault();
试试这个:

var nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("aaa", "http://tempuri.org/XMLSchema.xsd");

var xml = document.DocumentElement
    .SelectSingleNode("aaa:Foo", nsmgr)
    .InnerXml;
这是因为
默认名称空间
没有perfix

您可以使用
GetElementsByTagName
直接使用命名空间uri:

var xml = document.GetElementsByTagName("Foo", 
             "http://tempuri.org/XMLSchema.xsd")[0].InnerXml;

检查这是否回答了您的问题。谢谢,这很有效。我不明白为什么我也需要“/”这个词。
var nsmgr = new XmlNamespaceManager(document.NameTable);
nsmgr.AddNamespace("aaa", "http://tempuri.org/XMLSchema.xsd");

var xml = document.DocumentElement
    .SelectSingleNode("aaa:Foo", nsmgr)
    .InnerXml;
var xml = document.GetElementsByTagName("Foo", 
             "http://tempuri.org/XMLSchema.xsd")[0].InnerXml;