从 C# 中的文件获取不同节点值的快速方法?
Quick way to get different node values from a file in C#?
我想在不同变量中使用 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;
我可以在一行代码中或以较少冗余的方式完成此操作吗?
好吧,您当然不需要使用查询表达式 - 它们大多只是妨碍。这段代码会更简单:
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。 (XPathSelectElements
、XPathEvaluateNode
等)不过,我个人更喜欢继续使用 LINQ 提供的查询方法 XML。
您可以使用匿名类型来:
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
};
我想在不同变量中使用 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;
我可以在一行代码中或以较少冗余的方式完成此操作吗?
好吧,您当然不需要使用查询表达式 - 它们大多只是妨碍。这段代码会更简单:
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。 (XPathSelectElements
、XPathEvaluateNode
等)不过,我个人更喜欢继续使用 LINQ 提供的查询方法 XML。
您可以使用匿名类型来:
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
};