2013-05-06 108 views
0

这可能是一个基本的问题,但我是新来的C#查询XML文件,所以任何帮助将不胜感激..查询同级唯一的父节点中的XML节点

我有这个XML文件:

<?xml version="1.0" encoding="utf-8"?> 

<StatementList> 
    <Point> 
    <Statement> 
     <StatementString>S1</StatementString> 
     <Children> 
     <Point> 
      <Statement> 
      <StatementString>S2</StatementString> 
      <Children></Children> 
      </Statement> 
      <Statement> 
      <StatementString>!S2</StatementString> 
      <Children></Children> 
      </Statement> 
     </Point> 
     </Children> 
    </Statement> 
    <Statement> 
     <StatementString>!S1</StatementString> 
     <Children> 
     <Point> 
      <Statement> 
      <StatementString>S3</StatementString> 
      <Children></Children> 
      </Statement> 
      <Statement> 
      <StatementString>!S3</StatementString> 
      <Children></Children> 
      </Statement> 
     </Point> 
     </Children> 
    </Statement> 
    </Point> 
</StatementList> 

我需要查询XML文件,以便我只从每个<Point>获得兄弟<StatementString>。例:

一个 S1!S1

S2!S2

Ç S3!S3我目前使用此代码来查询XML文件

,但我似乎无法得到我需要的每个点的价值。

  var statementList = from point in pathsDocument.Descendants("Point") 
         select new 
         { 

         }; 

      var points = from statement in pathsDocument.Descendants("Point").Descendants("Statement") 
         select new 
         { 
          statementString = statement.Element("StatementString").Value, 

我该怎么做才能得到我需要的值?提前致谢。 };

+0

这是什么意思(“我该怎么做才能得到我需要的值?”)?你想得到什么? – lexeRoy 2013-05-06 03:12:51

+0

我只需要为每个获取兄弟的StatementStrings的值,就像我上面写的示例一样。原因当前,当我查询XML时,它将返回所有的StatementStrings,包括中的那些,即使是第一个。 – jaqui 2013-05-06 03:20:03

+0

我的答案不适合你吗?它应该 - 我在我的机器上运行它,并且它提供了你想要的数据。 – Gjeltema 2013-05-06 03:24:08

回答

1

试试这个:

 var points = pathsDocument.Descendants("Point"); 
     foreach (var point in points) 
     { 
      var statements = point.Elements("Statement").Select(x => x.Element("StatementString").Value); 
      Console.WriteLine(string.Join(" ", statements.ToArray())); 
     } 

我敢肯定有要组一个更好的方式起来,这样你就不必在foreach得到StatementString集合,但它的晚,我是新空房禁地,我明天工作了,这应该起作用。