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

时间:2014-01-08 12:52:28

标签: c# xml

我试图读取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循环?

由于 尼克

4 个答案:

答案 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));