2017-02-25 67 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