从C#中的文件中获取不同节点值的快捷方法?

时间:2017-11-07 14:15:05

标签: c# linq-to-xml

我想在不同的变量中使用不同的xml文件条件来获取不同节点的值。以下是一个例子

XDocument doc = XDocument.Load(@"D:\MyFiles\test.xml", LoadOptions.PreserveWhitespace);
var a = (from x in doc.Descendants("title")
         select x).First().Value;
var b = (from y in doc.Descendants("label")  
         where y.Ancestors("sec").Any()
         select y).First().Value;
var c = (from z in doc.Descendants("sec").Attributes("id")
         select z).First().Value;

我可以在一行代码中执行此操作,还是以不太冗余的方式执行此操作?

2 个答案:

答案 0 :(得分:6)

嗯,你当然不需要使用查询表达式 - 它们大多只是妨碍了。这段代码更简单:

XDocument doc = XDocument.Load(@"D:\MyFiles\test.xml",LoadOptions.PreserveWhitespace);
var a = doc.Descendants("title").First().Value;
var b = doc.Descendants("label").First(y => y.Ancestors("sec").Any()).Value;
var c = doc.Descendants("sec").Attributes("id").First().Value;

或者,您可以根据需要使用XPath。 (XPathSelectElementsXPathEvaluateNode等。)我个人更喜欢继续使用LINQ to XML提供的查询方法。

答案 1 :(得分:0)

您也可以使用匿名类型:

var res = from xml in xDoc.Descendants("filePath")
          select new
          {
              Title = xml.Descendants("title").FirstOrDefault()?.Value,
              Label = xml.Descendants("label").FirstOrDefault(l => l.Ancestors("sec").Any())?.Value,
              Sec = xml.Descendants("sec").Attributes("id").FirstOrDefault()?.Value
          };