2017-02-25 33 views
0

我是新來的XML,我需要解析.XML頁面的這一部分:解析嵌套的XML使用LINQ屬性

<TEAMDATA> 
<Team TriCode="BOU" ShortName="Bournemouth" LongName="AFC Bournemouth" OfficialName="AFC Bournemouth" ID="t91" Manager="Manager" Venue="Vitality Stadium"/> 
<Team TriCode="ARS" ShortName="Arsenal" LongName="Arsenal" OfficialName="Arsenal" ID="t3" Manager="Manager" Venue="Emirates Stadium"/> 
<Team TriCode="AVL" ShortName="Aston Villa" LongName="Aston Villa" OfficialName="Aston Villa" ID="t7" Manager="Caretaker Manager" Venue="Villa Park"/> 
<Team TriCode="BUR" ShortName="Burnley" LongName="Burnley" OfficialName="Burnley" ID="t90" Manager="Manager" Venue="Turf Moor"/> 

我的想法是讓tricode,短名稱併爲LOGNAME每個團隊印刷,例:

BOU Bournemouth AFC Bournemouth 
ARS Arsenal AFC Bournemouth 
... 

這是我的代碼:

static void Main(string[] args) 
    { 
     string strURL = "http://MyURL.xml"; 
     XDocument xDoc; 
     string title = ""; 

     xDoc = XDocument.Load(strURL); 
     var TeamID = from r in xDoc.Descendants("TEAMDATA") 

        select new 
        { 

         TriCode = r.Attribute("TriCode").Value, 
         ShortName = r.Element("ShortName").Value, 
         LongName = r.Element("LongName").Value, 
        }; 

     foreach (var r in TeamID) 
     { 
      Console.WriteLine(r.TriCode + r.ShortName + r.LongName); 
     } 
    } 

直到現在我收到

NullReferenceException異常

選擇新條款後。我需要解析這些行?

回答

1

這應該工作

from r in xDoc.Descendants("Team") 
       select new 
       { 

        TriCode = r.Attribute("TriCode").Value, 
        ShortName = r.Attribute("ShortName").Value, 
        LongName = r.Attribute("LongName").Value, 
       }; 

什麼是你的代碼錯誤?

xDoc.Descendants("TEAMDATA")返回所有那些元素名稱TEAMDATA後裔和元素沒有任何你正在尋找的屬性。

r.Element("ShortName").Value這必須是一個錯字。你想要的是屬性值,但不是元素本身。

+0

仍然我有未處理的類型'System.NullReferenceException'發生異常..對象引用未設置爲對象的實例。這是最常見的錯誤,我通常立即找到原因,在這種情況下,我找不到任何錯誤。 – Doraemon