2013-05-14 122 views
1

我有一點XML放入一個字符串,叫做爲myContent:與LINQ讀取XML文件到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.

任何想法?

+0

爲什麼你在開始時有一個String.Empty? – CloudyMarble 2013-05-14 12:41:09

+0

它不是必需的String.empty,但你認爲是原因嗎? – user1624552 2013-05-14 12:43:19

+0

可能是,代碼對我來說看起來不錯 – CloudyMarble 2013-05-14 12:46:28

回答

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元素。

+0

就像你說的,元素(「人物」)在contentXML和Elements()之間錯過了。現在,它的工作,謝謝! – user1624552 2013-05-14 20:02:49

+0

@ user1624552:非常歡迎。有時候很容易錯過這些東西。 – 2013-05-15 14:22:04