2

なぜこのコードを実行するのですか...

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.Count1を返す必要はありませんか?

4

3 に答える 3

3

SelectNodes「//BaaBaa」で呼び出すと、「BaaBaa」のすべての要素が返されます。

自分のドキュメントからわかるように、BaaBaaには属性がなく、単一の属性「HaveYouAny」を持つのは「BlackSheep」要素です。

子要素の属性数を取得する場合は、ノードを反復処理するときに、現在のノードからその属性数に移動する必要があります。

于 2010-02-18T00:44:52.893 に答える
1

element.Attributes子ではなく、要素自体の属性が含まれます。

BaaBaa要素には属性がないため、空です。

InnerXmlプロパティは、要素自体ではなく、要素のコンテンツのXMLを返します。したがって、属性があります。

于 2010-02-18T00:45:01.410 に答える
0
<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
于 2010-02-18T00:46:15.827 に答える