0

私はこのようなxmlファイルを持っています:

  <xml>
    <students>
      <person name=jhon/>
      <person name=jack/>
      ...
    </students>
    <teachers>
       <person name="jane" />
       <person name="jane" />
       ...
    </teachers>
  </xml>

このコードを使用する場合:

var xml = XDocument.Parse(myxmlstring, LoadOptions.None);
foreach(XElement studentelement in xml.Descendants("person"))
{
    MessageBox.Show(studentelement.Attribute("name").Value);
}

すべてが正常に動作します!しかし、私が生徒と教師のどちらを繰り返しているのかはわかりません。

しかし、私が試してみると:

var a = xml.Element("students");

aはnullです!!!

xmlドキュメントでc#を使用して特定の要素を選択するにはどうすればよいですか?

最初に生徒だけを繰り返し処理し、いくつかのリストボックスに入力し、教師を繰り返し処理して他のことを行うことができれば素晴らしいと思います。:)

念のため、xmlファイルを変更することはできません...

最後に、これらすべてで実際に必要なのは、ファイル内の特定の要素のすべての子を取得することです。

みんな、ありがとう!!!

4

2 に答える 2

4

しかし、私が試してみると:var a = xml.Element( "students");

aはnullです!!!

はい、xmlドキュメントであり、そのすぐ下にある要素は1つだけなので、と呼ばれxmlます。使用する場合:

var students = xml.Root.Element("students");

<students>代わりに、ルート要素の真下を検索し、機能します。

Elementまたは、次の2回使用することもできます。

var students = xml.Element("xml").Element("students");

またはDescendants、もちろん使用します。

さらに、プロパティを使用して要素の親要素にアクセスできます...したがって、すべてのParent要素を繰り返し処理し、何らかの理由で親要素名を使用したい場合は、確かにそれを行うことができます。 person

于 2012-11-27T16:40:46.683 に答える
1

Element直接の子ノードのみを返します。xmlツリーを再帰的に参照するには、Descendants代わりにを使用します。

生徒、教師の順に列挙するには、次のようにします。

var xml = XDocument.Parse(myxmlstring, LoadOptions.None);

var students = xml.Descendants("students");
var teachers = xml.Descendants("teachers");

foreach (var studentElement in students.Descendants("person"))
{
    MessageBox.Show(studentElement.Attribute("name").Value);
}

foreach (var teacherElement in teachers.Descendants("person"))
{
    MessageBox.Show(teacherElement.Attribute("name").Value);
}
于 2012-11-27T16:43:57.420 に答える