2012-05-09 7 views
0

私はXMLファイルからデータをインポートして順番に並べ替えようとしていますが、実行するとオブジェクト参照がオブジェクトのインスタンスに設定されません。ここでは、使用しているコードのスニペットです。XMLをインポートするときにnullとは何ですか?

XElement data = XElement.Load("blockData.xml"); 

var sortedElements = 
from c in data.Element("BLOCKS").Elements("BLOCK") 
orderby (string)c.Element("X") descending, 
     (string)c.Element("Y") descending, 
     (string)c.Element("Z") descending 
     select new 
     { 
      name1 = (string)c.Element("NAME"), 
      X1 = (string)c.Element("X"), 
      Y1 = (string)c.Element("Y"), 
      Z1 = (string)c.Element("Z") 
     }; 
foreach (var r in sortedElements) 
Console.WriteLine("X:{0} Y:{1} Z:{2} Name:{3}", 
      r.X1, r.Y1, r.Z1, r.name1); 

そして、XMLファイルに含まれているもののサンプル

<BLOCKS> 
    <BLOCK> 
    <NAME>B1</NAME> 
    <X>0</X> 
    <Y>0</Y> 
    <Z>0</Z> 
    </BLOCK> 
</BLOCKS> 
+1

XMLファイルにルート要素を追加すると、私はLINQのプロではないけど、あなたは子孫の代わりの要素を試してみましたか? – Machinarius

+0

どの行に例外がスローされますか?あなたのforeach-loopの中にあれば、単に(r!= null){console.writeln ...} –

+0

をチェックすることができます。 var sortedElementsがnull参照例外をスローしているようです。 – Peter

答えて

0

で試してみてください:ブロックはXMLのルートであるため

var sortedElements = 
from c in data.Root.Elements("BLOCK") 

+0

+1:私がする前にあなたはそれに1分持っています。 – zimdanen

+1

XElementにはルートがありません。 XDocumentだけが行います。 –

+0

私はdownvoteの少し厳しいと思う - 答えは正しいです。 BLOCKSは現在の要素です。単純な誤称。 – zimdanen

-1

は、あなたのいくつかは、このような他の問題に推薦し及びreserachたものをボードに取った後、私はあなたがnullreference例外

の問題を克服するために、以下のように明示的にノードの値にアクセスする必要があることが判明しました
var sortedElements = 
    from c in data.DescendantsAndSelf("BLOCKS").Elements("BLOCK") 
    orderby 
     c.Element("X").Value descending, 
     c.Element("Y").Value descending, 
     c.Element("Z").Value descending 
    select new 
    { 
     name1 = (string)c.Element("NAME"), 
     X1 = (string)c.Element("X"), 
     Y1 = (string)c.Element("Y"), 
     Z1 = (string)c.Element("Z") 
    }; 
    foreach (var r in sortedElements) 
    Console.WriteLine("X:{0} Y:{1} Z:{2} Name:{3}", 
      r.X1, r.Y1, r.Z1, r.name1);    

aswellは

<root> 

    <BLOCKS> . . . </BLOCKS> 

</root> 
+0

です。実際の問題は何でしたか? –

+0

例えば、降下しているc.Element( "X")を指すとき、それは要素の位置の要素の中の値を指していないことが分かりました。 – Peter

関連する問題