LINQ 2 XML:简单的输入,大脑放屁与解决方案

Jas*_*zek 0 c# linq-to-xml

所以我有这个简单的XML文本:

<errors xmlns="http://schemas.google.com/g/2005">
  <error>
    <domain>GData</domain>
    <code>InvalidRequestUriException</code>
    <internalReason>You must specify at least one metric</internalReason>
  </error>
</errors>
Run Code Online (Sandbox Code Playgroud)

提取internalReason元素值的最简单方法是什么?

Jon*_*eet 6

您需要在查找后代时指定命名空间.例如:

var xml = XElement.Load("test.xml");
XNamespace ns = "http://schemas.google.com/g/2005";
var reason = xml.Descendants(ns + "internalReason").First().Value;
Run Code Online (Sandbox Code Playgroud)

要么:

 var xml = XElement.Load("test.xml");
 XNamespace ns = "http://schemas.google.com/g/2005";
 var reason = xml.Elements(ns + "error").First()
                 .Elements(ns + "internalReason").First().Value;
Run Code Online (Sandbox Code Playgroud)

(当我们没有提供任何额外的值时,我并不热衷于使用查询表达式.)

您可能还想将其拆分并使用,FirstOrDefault以便检查您要求的元素是否存在.