1

myContent と呼ばれる文字列に配置された小さな XML があります。

 <People xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <Person ID="1" name="name1" />
     <Person ID="2" name="name2" />
     (....)
     <Person ID="13" name="name13" />
     <Person ID="14" name="name14" />
 </People>

C# では、以前の XML コンテンツを以下のように文字列変数に格納しました。

        private string myContent = String.Empty +
        "<People xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
        "<Person ID=\"1\" name=\"name1\" />" +
        "<Person ID=\"2\" name=\"name2\" />" +
        (...)
        "<Person ID=\"13\" name=\"name13\" />" +
        "<Person ID=\"14\" name=\"name14\" />" +
        "</People>";

そして、私は以下のようにロードします:

 XDocument contentXML = XDocument.Parse(myContent);

次に、それらすべてを繰り返し処理します。

 IEnumerable<XElement> people = contentXML.Elements();
 foreach (XElement person in people)
 {
     var idPerson = person.Element("Person").Attribute("ID").Value;
     var name = person.Element("Person").Attribute("name").Value
     // print the person ....
 }

問題は、最初の人だけを取得し、残りは取得しないことです。人には 1 つの要素があり、14 の要素が必要であると書かれています。

何か案は?

4

1 に答える 1

2

Elements()問題は、ドキュメント ルートから要求していることです。この時点で、要素は 1 つだけPeopleです。

あなたが実際にやりたいことは次のようなものです:

var people = contentXML.Element("People").Elements()

したがって、ループは次のようになります。

IEnumerable<XElement> people = contentXML.Element("People").Elements();
foreach ( XElement person in people )
{
    var idPerson = person.Attribute( "ID" ).Value;
    var name = person.Attribute( "name" ).Value;
    // print the person ....
}

これにより、意図したとおりに各要素が反復処理さPersonれます。

于 2013-05-14T13:07:07.780 に答える