仅在父节点内查询兄弟XML节点

时间:2013-05-06 02:32:45

标签: c# xml excel siblings

这可能是一个基本问题,但我是新手在C#中查询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文件,以便我只从每个<StatementString>获取兄弟<Point>。例:

A S1!S1

B S2!S2

C 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,

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

1 个答案:

答案 0 :(得分: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集合,但是现在已经很晚了,我脑力激动,我明天有工作,这应该有效。