如何使用c#从xml获取节点-我做错了什么?
名称空间和XML仍然让我非常困惑 这是我的XML(来自SOAP请求)如何使用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
但是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;