我有XML
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
我将xml加载到XDocument
XDocument xDoc = XDocument.Parse(xmlString);
然后我尝试查找XElement
包含正文
我试过
XElement bodyElement = xDoc.Descendants(XName.Get("Body", "s")).FirstOrDefault();
或
XElement bodyElement = xDoc.Descendants("Body").FirstOrDefault();
或
XElement bodyElement = xDoc.Elements("Body").FirstOrDefault();
但bodyElement
始终为null
。
如果我尝试添加命名空间
XElement bodyElement = xDoc.Descendants("s:Body").FirstOrDefault();
我收到有关:
的错误。
如果我从XML中删除 s
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<Body s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
一切正常。
如何让XElement
包含正文?
答案 0 :(得分:4)
您正在尝试查找URI为“s”的命名空间 - 它没有该URI。 URI为"http://schemas.xmlsoap.org/soap/envelope/"
。我还建议避免使用XName.Get
,只使用XNamespace
和XName +(XNamespace, string)
运算符:
XNamespace s = "http://schemas.xmlsoap.org/soap/envelope/";
XElement body = xDoc.Descendants(s + "Body").FirstOrDefault();