从XDocument获取XElement

时间:2016-02-24 15:46:20

标签: c# xml linq-to-xml

我有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包含正文

1 个答案:

答案 0 :(得分:4)

您正在尝试查找URI为“s”的命名空间 - 它没有该URI。 URI为"http://schemas.xmlsoap.org/soap/envelope/"。我还建议避免使用XName.Get,只使用XNamespaceXName +(XNamespace, string)运算符:

XNamespace s = "http://schemas.xmlsoap.org/soap/envelope/";
XElement body = xDoc.Descendants(s + "Body").FirstOrDefault();