سؤال

لماذا تشغيل هذا الرمز ...

XmlDocument doc = new XmlDocument();

string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
                   <BaaBaa>
                        <BlackSheep HaveYouAny=""Wool"" />  
                   </BaaBaa>";

doc.LoadXml(xml);

XmlNodeList nodes = doc.SelectNodes("//BaaBaa");

foreach (XmlElement element in nodes)
{
    Console.WriteLine(element.InnerXml);

    XmlAttributeCollection attributes = element.Attributes;
    Console.WriteLine(attributes.Count);
}

إنتاج الإخراج التالي في موجه الأوامر؟

<BlackSheep HaveYouAny="Wool" />
0

وهذا لا ينبغي attributes.Count العودة 1؟

هل كانت مفيدة؟

المحلول

عندما تتصل SelectNodes مع "// baabaa" يعيد جميع عناصر "baabaa".

كما ترون من وثيقتك الخاصة ، لا يوجد لدى Baabaa سمات ، إنه العنصر "Blacksheep" الذي يحتوي على السمة الفردية "Hasouany".

إذا كنت ترغب في الحصول على عدد السمات لعناصر الأطفال ، فيجب عليك التنقل إلى ذلك من العقدة التي تتواصل فيها عند التكرار من خلال العقد.

نصائح أخرى

element.Attributes يحتوي على سمات العنصر نفسه ، وليس أطفاله.

منذ BaaBaa العنصر ليس لديه أي سمات ، فهو فارغ.

ال InnerXml تقوم الخاصية بإرجاع XML لمحتويات العنصر ، وليس للعنصر نفسه. لذلك ، لديها سمة.

<BlackSheep HaveYouAny=""Wool"" /> // innerXml that includes children
<BaaBaa> // is the only node Loaded, which has '0' attributes 

المحلول

XmlAttributeCollection attributes = element.FirstChild.Attributes;

سوف ينتج ما يلي ، مخرجات مطلوبة

<BlackSheep HaveYouAny="Wool" />
1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top