Читать родительские узлы только из XML с помощью LINQToXML - PullRequest
2 голосов
/ 30 марта 2010

У меня есть строка XML, в которой есть родительские узлы "Комитет", а внутри находится другой дочерний узел "Комитет". Когда я использую «from committee in xDocument.DescendantsAndSelf("Committee")», он также читает дочерний узел, но я не хочу читать дочерние узлы, я просто хочу читать только родительские узлы.

<Committee>
  <Position>STAFF</Position>
  <Appointment>1/16/2006</Appointment>
  <Committee>PPMSSTAFF</Committee>
  <CommitteeName>PPMS Staff</CommitteeName>
  <Expiration>12/25/2099</Expiration>      
</Committee>
<Committee>
   <Position>STAFF</Position>
  <Appointment>4/16/2004</Appointment>
  <Committee>PMOSSTAFF</Committee>
  <CommitteeName>PPMS </CommitteeName>
  <Expiration>12/25/2099</Expiration>
</Committee>

     XElement xDocument= XElement.Parse(xml);

 var committeeXmls = from Committee in xDocument.Descendants("Committee")
                                select new
                                {
                                    CommitteeName = Committee.Element("CommitteeName"),
                                    Position = Committee.Element("Position"),
                                    Appointment = Committee.Element("Appointment"),
                                    Expiration = Committee.Element("Expiration")
                                };

            int i = 0;
            foreach (var committeeXml in committeeXmls)
            {
                if (committeeXml != null)
                {
                    drCommittee = dtCommittee.NewRow();
                    drCommittee["ID"] = ++i;
                    drCommittee["CommitteeName"] = committeeXml.CommitteeName.Value;
                    drCommittee["Position"] = committeeXml.Position.Value;
                    drCommittee["Appointment"] = committeeXml.Appointment.Value;
                    drCommittee["Expiration"] = committeeXml.Expiration.Value;

                    dtCommittee.Rows.Add(drCommittee);                                        //   educationXml.GraduationDate.Value, educationXml.Major.Value);
                }
            }

Ответы [ 2 ]

2 голосов
/ 30 марта 2010

Используйте метод Elements вместо Descendants.

Изменить это:

from Committee in xDocument.Descendants("Committee")

К этому:

from Committee in xDocument.Elements("Committee")

Это вернет дочерние элементы Committee текущего элемента (переменная xDocument).

0 голосов
/ 30 марта 2010

Можно использовать метод расширения XPathSelectElements (в пространстве имен System.Xml.Xpath), чтобы выбрать только те элементы Committee, у которых есть дочерний элемент Committee.

var committeeXmls = from Committee in xDocument.XPathSelectElements("Committee[Committee]")
                    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...