1

我将一个小 XML 放入一个名为 myContent 的字符串中:

 <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()从文档根目录中请求。此时只有一个元素,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 回答