使用LINQ TO XML读取XML文档

时间:2013-05-14 12:37:47

标签: xml linq-to-xml

我将一个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个。

有什么想法吗?

1 个答案:

答案 0 :(得分: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元素。