2013-05-06 135 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集合,但它的晚,我是新空房禁地,我明天工作了,這應該起作用。