C# C从XML树中读取元素的值

C# C从XML树中读取元素的值,c#,xml,C#,Xml,我试图读取XML文档中特定元素的一些值,例如和的值 有没有更直接的方法来选择我需要的元素值,而不必使用foreach循环 谢谢 Nick您可以在linq查询中执行此操作: var quiz = (from elements in doc.Elements("main").Elements("beta").Elements("epsilon") select (string)elements).ToList(); 它将为您提供值列表。您可以在不使用foreach的情况下附加文本:

我试图读取XML文档中特定元素的一些值,例如和的值

有没有更直接的方法来选择我需要的元素值,而不必使用foreach循环

谢谢
Nick

您可以在linq查询中执行此操作:

var quiz = (from elements in doc.Elements("main").Elements("beta").Elements("epsilon")
       select (string)elements).ToList();
它将为您提供值列表。您可以在不使用foreach的情况下附加文本:

StringBuilder sb = new StringBuilder();
var values = quiz.Select(x => sb.Append(x));
textBox1.AppendText(sb.ToString());
或者更好的方式:

var text = doc.Descendants("epsilon")
               .Select(x => (string)x)
               .Aggregate((x,y) => x + y);
textBox1.AppendText(text)

使用以下命令,这样就不必使用foreach:

IEnumerable<string> values = quiz.Select(x => x.Value);
或一应俱全:

IEnumerable<string> values = doc.Elements("main").Elements("beta").Elements("epsilon").Select(x => x.Value);

textBox1.AppendText(values.Aggregate((i, j) => i + j));

XPath是直接访问节点的另一个选项。此推荐信可能对您有所帮助。

编辑以添加到不带foreach的文本框,其中result=XPath查询结果集合:

textbox1.AppendText(result.Select(x => x.Value));

XPath允许动态路径构建比LINQ查询稍微简单一些。

+1当我看到您的答案弹出时,我正在写这篇文章。下面是一个从XPath请求开始的示例。它不是详尽的,也不包含完整的引用,但它是一个很好的起点。他要求优化for循环,而不是from语句。使用XPath,他仍然会得到一个需要处理的项目数组。使用StringBuilder和AppendText可以得到它的副本。其中一个是不必要的。谢谢你,塞尔曼。我最初尝试了你写的代码,我认为我得到了一个错误的结果,事实上它是正确的,但我很累。嗨,山姆,谢谢你的回答。我从您的示例代码中得到一个错误,无法隐式Ienumerable to ListList values=doc.Elementsmain.Elementsbeta.Elementsepsilon.Selectx=>x.Value.ToList将解决Ienumerable错误。注意:.ToList调用。或者实例化为IEnumerable values=而不需要.ToList调用。
textBox1.AppendText(quiz.Select(x => x.Value).Aggregate((s, s1) => s + s1));
textbox1.AppendText(result.Select(x => x.Value));
textBox1.AppendText(quiz.Select(x => x.Value).Aggregate((s, s1) => s + s1));