2014-01-05 114 views
0

我很努力讀取這個XML文件在LINQ到XML。有人可以幫助我嗎? 我需要讀取每個曲目信息。LINQ到XML,讀取XML文件

<playlist version="1" xmlns="http://xspf.org/ns/0/" xmlns:jwplayer="http://developer.longtailvideo.com/trac/wiki/FlashFormats"> 
<title>Some title here</title> 
<creator>Some creater</creator> 
<info>somesite.com</info> 
    <trackList> 
     <track> 
      <title>Title 1</title> 
      <creator>Creater 1</creator> 
      <location>location 1</location> 
     </track> 
     <track> 
      <title>Title 2</title> 
      <creator>Creater 2</creator> 
      <location>location 2</location> 
     </track> 
    </trackList> 
</playlist> 

這就是我想要做的。

XElement xelement1 = XElement.Load(@"pathtoxmlfile\my.xml"); 

IEnumerable<XElement> tracks= xelement1.Elements(); 
// Read the entire XML 
foreach (var track in tracks.Descendants("track")) 
{ 
    Console.WriteLine(track); 
    Console.ReadLine(); 
} 

我正在使用C#。

感謝 成員Parminder

+0

這真的很容易,你到目前爲止嘗試過什麼嗎? – bas

+0

你有多遠?我懷疑你是因爲命名空間而感到困惑,但是沒有看到你嘗試過的東西,我們看不到有什麼問題。 –

+0

我已更新該問題。感謝你們的幫助。我沒有與C#聯繫超過1年。 – Parminder

回答

1
  1. 你爲什麼負荷Y我們的文件分爲XElement而不是XDocument

  2. 您必須在您的查詢中使用XNamespace實例,因爲您的文檔使用默認名稱空間xmlns="http://xspf.org/ns/0/"

    var ns = XNamespace.Get("http://xspf.org/ns/0/"); 
    
  3. 您可以使用LINQ查詢獲取從XML文檔中提取數據的集合。然後,您可以遍歷該集合並執行所需的任何操作。

    var tracks = (from t in xDoc.Root.Element(ns + "trackList").Elements(ns + "track") 
           select new 
           { 
            Title = (string)t.Element(ns + "title"), 
            Creator = (string)t.Element(ns + "creator"), 
            Location = (string)t.Element(ns + "location") 
           }).ToList(); 
    

    tracks將是一個List<T>其中T是匿名的類型與3個string屬性:TitleCreatorLocation

+0

感謝MarcinJuraszek。像魅力一樣工作。 – Parminder

1

你忘了包括命名空間的名稱,做如下更改:

XNamespace defNs = "http://xspf.org/ns/0/"; 

而且

foreach (var track in tracks.Descendants(defNs + "track")) 
1
XElement tracks = XElement.Load(@"pathtoxmlfile\my.xml"); 
foreach (var track in tracks.Descendants("track")) 
{ 
    Console.WriteLine((string)track.Element("title")); 
    Console.WriteLine((string)track.Element("creator")); 
    Console.WriteLine((string)track.Element("location")); 
}