我试图读取XML文档中特定元素的一些值,例如< main>< alpha>,< main>< beta>< epsilon>的值。和< main>< gama>< delta>。
<?xml version="1.0" ?>
<main>
<alpha>One</alpha>
<beta>
<delta>DeltaValueFromBeta</delta>
<epsilon>EpsilonValueFromBeta</epsilon>
<phi>PhiValueFromBeta</phi>
</beta>
<gamma>
<delta>DeltaValueFromGamma</delta>
<epsilon>EpsilonValueFromGamma</epsilon>
<phi>PhiValueFromGamma</phi>
</gamma>
</main>
我可以使用以下代码获取值:
XDocument doc = XDocument.Load("Sample.xml");
var quiz = from elements in doc.Elements("main").Elements("beta").Elements("epsilon")
select elements;
foreach (var item in quiz)
{
string sValue = (string) item.Value;
textBox1.AppendText(sValue);
}
有没有更直接的方法来选择我需要的元素值,而不必使用foreach循环?
由于 尼克
答案 0 :(得分:2)
XPath是直接访问节点的另一种选择。此参考可能对您有所帮助。 How to get values from an XML file matching XPath query in C#
编辑以添加到没有foreach的文本框,其中result = XPath查询结果集合:
textbox1.AppendText(result.Select(x => x.Value));
XPath允许动态路径构建比LINQ查询更容易。
答案 1 :(得分:0)
您可以在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)
答案 2 :(得分:0)
使用以下内容,因此您不必使用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));
答案 3 :(得分:0)
textBox1.AppendText(quiz.Select(x => x.Value).Aggregate((s, s1) => s + s1));