开发者

Read Parent nodes only from XML using LINQToXML

开发者 https://www.devze.com 2022-12-25 05:12 出处:网络
I have XML string that has parent nodes \"Committee\" and inside that another child node \"Committee\" is there. When I am using \"from committee in xDocument.DescendantsAndSelf(\"Committee\")\" it is

I have XML string that has parent nodes "Committee" and inside that another child node "Committee" is there. When I am using "from committee in xDocument.DescendantsAndSelf("Committee")" it is reading childnode also, but I don't want to read child nodes, I just want to read Parent nodes only.

<Committee>
  <Position>STAFF</Position开发者_如何学Python>
  <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);
                }
            }


Use the Elements method instead of Descendants.

Change this:

from Committee in xDocument.Descendants("Committee")

To this:

from Committee in xDocument.Elements("Committee")

This will return the child Committee elements of the current element (xDocument variable).


You could use the XPathSelectElements extension method (in the System.Xml.Xpath namespace) to select only those Committee elements that have a Committee child element.

var committeeXmls = from Committee in xDocument.XPathSelectElements("Committee[Committee]")
                    ...
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号