2012-05-10 8 views
0

XMLファイルから値を取得しようとしていますが、値が空であることがわかりました。 textBox6, textBox7, textBox14対応する要素の属性値は空/ NULLです。エラーメッセージはNull reference error was unhandedです。どのようにこれを修正できますか?要素LINQの空の属性の値を無視します。C#

private void DisplayFile(string path) 
    { 

     var doc = XDocument.Load(path); 
     var ns = doc.Root.GetDefaultNamespace(); 
     var conn = doc.Root.Element(ns + "connection"); 

     textBox1.Text = conn.Element(ns + "sourceId").Value; 


     var doc1 = XDocument.Load(path); 
     var ns1 = doc.Root.GetDefaultNamespace();   
     var conn1 = doc.Root.Element(ns1 + "connectionContext"); 


    } 
+1

どのラインがクラッシュしていますか? – Arion

+0

@Arion: ''属性値が要素内で空であれば、クラッシュします。 – linguini

+0

* if(conn.Element(ns + "sourceId")!= null)*をチェックしたいのはなぜですか? – Likurg

答えて

4

特定の要素がXML foo.Element("someNode")に存在しない場合、nullが返されます。 .Valueにアクセスすると、NullReferenceExceptionが発生します。

このNullReferenceExceptionを回避するには、要素がnullでないかどうかを確認する必要があります。

例 contextType と:

var contextType = conn1.Element(ns + "contextType"); 
if (contextType != null) 
{ 
    textBox15.Text = contextType.Value; 
} 

更新:

あなたはルート要素からのConnectionContextノードをロードしてみてください。しかし、このノードはソースノードの子です。あなたはまず、このノードをロードする必要があります。

var source = doc.Root.Element(ns + "source"); 
var conn1 = source.Element(ns + "connectionContext"); 
+0

私はあなたのコードを試しましたが、私は同じエラーメッセージが表示されています。 – linguini

+0

それは私に働いたはずのように見えます、ブレークポイントがヒットしていますか? – Coops

+0

@Stefan:この行にエラーがあります。 'var contextType = conn1.Element(ns + "contextType"); ''オブジェクト参照がオブジェクトのインスタンスに設定されていません。' – linguini

0

私はあなたの問題はこれを試して見つける(私は文字列の原因がテキストボックスを作りたくなかった使用)

 var doc = XDocument.Load("C:\\Test\\stovfl.xml"); 
     var ns = doc.Root.GetDefaultNamespace(); 

     var conn = doc.Root.Element(ns + "connection"); 
     string s1 = conn.Element(ns + "sourceId").Value; 
     string s2 = conn.Element(ns + "username").Value; 

     var conn1 = doc.Root.Element("source"); 

     var conn2 = conn1.Element("connectionContext"); 
     string s6 = conn2.Element(ns + "organization").Value; 
     string s7 = conn2.Element(ns + "field").Value; 

     string s14 = conn2.Element(ns + "description").Value; 
     string s15 = conn2.Element(ns + "contextType").Value; 

問題は、あなたがのConnectionContextを持っているということでしたソースですが、見つけようとしていますルート

+0

@KarthikRANGARAJあなたはStefanのような要素をすべてチェックする必要があります – Likurg

関連する問題