4

こんにちは、次の質問があります...以前のプログラミング経験がなく、C#でのプログラミングに非常に慣れていないため、助けてください...

私のコードでは、Xml ファイル内の XElement を反復処理して、その Xelement を Capability と呼ばれる親に追加することを想定しています....これは私のコードです...

if (xElem.HasElements)
        {

            foreach (XElement xChild in xElem.Element("Elements"))
            {
                Capability capChild = Parse(xChild);
                capParent.Children.Add(capChild);
            }
        }

ここで foreach ループはエラーを出します

エラー 32 foreach ステートメントは、'System.Xml.Linq.XElement' 型の変数を操作できません。

XElement に子があるかどうかを確認し、それを親機能に追加する機能を実行するにはどうすればよいですか?

4

2 に答える 2

4

最初の修正として、「s」を追加します:

//foreach (XElement xChild in xElem.Element("Elements"))
  foreach (XElement xChild in xElem.Elements("Elements"))

<Elements>これは、 xElem の下の XML に1 つ以上のタグがあることを前提としています。

于 2012-11-08T13:44:19.163 に答える
2

ヘンクの答えはうまくいくはずですが、私は個人的に使用します

    foreach (XElement xChild in xElem.Descendants())

xElem は、すべての子要素が必要な親要素と等しくなります。または、基本的に同じタスクを達成するために LINQ クエリを使用することもできます

    var children =
       from xChild in xElem.Descendants()
       select Parse(xChild)

これは、ループしてその方法で追加できる IEnumerable を返す必要があります。

編集:

また、プログラミングの経験がなく、C# を初めて使用するというあなたの言葉にも気づきました。このエラーがスローされた理由を理解することも重要だと思います。C# で foreach ループを使用するには、コレクションに IEnumerable を実装する必要があります。これにより、コレクション型でデータの列挙方法を定義できます。XElement は、要素のコレクションではなく、単一の要素を表すことを意図しているため、列挙可能ではありません。したがって、xElem.Element("ElementName") を使用すると、配列やコレクションではなく、単一の結果が返されます。xElem.Elements("ElementName") を使用すると、XName に一致するすべての XElements のコレクションが返されます。ただし、名前に関係なく単一の要素のすべての子要素が必要な場合は、ここで xElem.Descendants() の出番です。

于 2012-11-08T13:52:38.267 に答える