我将一个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个。
有什么想法吗?
答案 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
元素。