2017-02-25 3 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、短縮名およびログ名を持つことです

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); 
     } 
    } 
:印刷された各チームは、例:

BOU Bournemouth AFC Bournemouth 
ARS Arsenal AFC Bournemouth 
... 

これは私が持っているコードです。

は、今まで私は、select新しい句の後

と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

関連する問題