سؤال

لديّ سلسلة XML التي تحتوي على "لجنة" العقد الوالدية وداخلها "لجنة" عقدة طفل أخرى موجودة. عندما أستخدم "from committee in xDocument.DescendantsAndSelf("Committee")"إنه يقرأ childnode أيضًا ، لكنني لا أريد قراءة العقد الفرعية ، أريد فقط قراءة العقد الأصل فقط.

<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);
                }
            }

لا يوجد حل صحيح

نصائح أخرى

استخدم ال Elements الطريقة بدلا من Descendants.

غير هذا:

from Committee in xDocument.Descendants("Committee")

الى هذا:

from Committee in xDocument.Elements("Committee")

هذا سوف يعيد الطفل Committee عناصر العنصر الحالي (xDocument عامل).

يمكنك استخدام طريقة تمديد XPathSelectElements (في مساحة اسم System.xml.xpath) لتحديد عناصر اللجنة فقط التي لديها عنصر طفل في اللجنة.

var committeeXmls = from Committee in xDocument.XPathSelectElements("Committee[Committee]")
                    ...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top