2013-09-30 64 views
0

以下是我從URL獲得的XML數據。當我查看源代碼,這裏是它的外觀:XML數據到數組

<xml> 
    <beginning> 

     <id>information from rss provider here</id> 
     <updated>information from rss provider here</updated> 
     <link rel='alternate' type='text/html' href='tttt' title='alternate'/> 
     <link rel='self' type='application/atom+xml' href='tttt'/> 

     <someschemas> 
      <id>test</id> 
      <movieid>test</movieid> 
      <updated>teeeeest</updated> 
      <types scheme='vals' term='test'/> 
      <title type='html'>test</title> 
      <summary type='html'>test</summary> 
      <descriptions type='html'>test</descriptions> 
      <link rel='alternate' type='text/html' href='tttt' title='alternate'/> 
      <link rel='self' type='application/atom+xml' href='tttt'/> 
      <actor> 
       <name>teest</name> 
       <phone>test</phone> 
      </actor> 
     </someschemas> 

     <someschemas> 
      <id>test</id> 
      <movieid>test</movieid> 
      <updated>teeeeest</updated> 
      <types scheme='vals' term='test'/> 
      <title type='html'>test</title> 
      <summary type='html'>test</summary> 
      <descriptions type='html'>test</descriptions> 
      <link rel='alternate' type='text/html' href='tttt' title='alternate'/> 
      <link rel='self' type='application/atom+xml' href='tttt'/> 
      <actor> 
       <name>teest</name> 
       <phone>test</phone> 
      </actor> 
     </someschemas> 

     <someschemas> 
      <id>test</id> 
      <movieid>test</movieid> 
      <updated>teeeeest</updated> 
      <types scheme='vals' term='test'/> 
      <title type='html'>test</title> 
      <summary type='html'>test</summary> 
      <descriptions type='html'>test</descriptions> 
      <link rel='alternate' type='text/html' href='tttt' title='alternate'/> 
      <link rel='self' type='application/atom+xml' href='tttt'/> 
      <actor> 
       <name>teest</name> 
       <phone>test</phone> 
      </actor> 
     </someschemas> 
    </beginning> 
</xml> 

我能讀在消息框中的內容:

WebRequest request = WebRequest.Create("http://www.test.com/file.xml"); 
WebResponse response = request.GetResponse(); 
Stream dataStream = response.GetResponseStream(); 
XElement xelement = XElement.Load(dataStream);      
IEnumerable<XElement> employees = xelement.Elements();    
foreach (var employee in employees) 
{ 
    if (employee.Elements("content") != null) 
    { 
     MessageBox.Show(employee.Value.ToString()); 
    }     
} 

我想這個保存到一個數組,或列表,或者LINQ。

我怎樣才能使用上面的代碼與上面的XML,並把它變成一個數組。

我只想內<someschemas>.的所有數據,只是這些值作爲鍵/值對:

<title type='html'>test</title> 
    <summary type='html'>test</summary> 
    <descriptions type='html'>test</descriptions> 
<actor> 
<name>teest</name> 
<phone>test</phone> 
</actor> 
+1

那麼你爲什麼不創建一個Employee類呢?你已經循環了一些東西,只需將它添加到一個類中,給出一些語義含義,然後對其進行排序。例如,而不是*顯示*'employee.Value',*將它添加到'List'中。 – Arran

+0

嗨Arran,我想價值是在鍵/值對。謝謝。 – NULL

+0

請注意'WebResponse'和'Stream'是'IDisposable'資源,因此應該在'using'塊中。 –

回答

1

爲了完整起見,您需要製作自己的課程來存儲每個someschemas對象。

class SomeSchemas 
{ 
    public string ID {get;set;} 
    public string MovieId {get;set;} 
    //add in others here 
    public string Actor_Name {get;set;} 
    public string Actor_Phone {get;set} 
} 

然後遍歷並添加您的項目

List<SomeSchemas> items = XElement.Load(dataStream) 
    .Descendants("someschemas") 
    .Select(x => new SomeSchemas() 
    { 
     ID = x.Element("id").Value, 
     MovieId = x.Element("movieid").Value, 
     //add in others here 
     Actor_Name = x.Element("actor").Element("name").Value, 
     Actor_Phone = x.Element("actor").Element("phone").Value 
    }.ToList(); 

如果Actors可以有多個條目,那麼你需要做內SomeSchemas一個List對象。

然後,您可以在循環中使用items,並對其執行linq。它不會是一個鍵/值對(如dictionary),但您可以根據其ID選擇一個項目(如果它們是唯一的)。

SomeSchemas myObject = items.Single(x => x.ID == "asdf"); 
+0

謝謝,演員只有一個條目。 – NULL

4

這裏是一個LINQ到XML版本:

string[] names = XElement.Load(dataStream).Descendants("Name") 
         .Select(element => element.Value).ToArray(); 

這將給所有Name元素來自文檔。

+0

很好,除了當你的變量是一個'XElement'時調用'ToArray()'。返回類型應該是'string []'。 – gunr2171

+0

我得到一個錯誤,說你不能隱式地將類型字符串[]轉換爲system.xml.linq.xlelement – NULL

+0

@Menew,更新了答案。 – gunr2171