1

InnerText を使用して xml を 15 の texbox にロード/読み取るスクリプトがあります。

これがコードです。

doc = new XmlDocument();
doc.Load(dlgOpenFile.FileName);
root = doc.DocumentElement;
txt1.Text = root.GetElementsByTagName("Seksi")[0].InnerText;
txt2.Text = root.GetElementsByTagName("Kota")[0].InnerText;
txt3.Text = root.GetElementsByTagName("Tanggal")[0].InnerText;
txt4.Text = root.GetElementsByTagName("NoIntelejen")[0].InnerText;
txt5.Text = root.GetElementsByTagName("Peta")[0].InnerText;
txt6.Text = root.GetElementsByTagName("Kedar")[0].InnerText;
txt7.Text = root.GetElementsByTagName("Tahun")[0].InnerText;
txt8.Text = root.GetElementsByTagName("Lembar")[0].InnerText;
txt9.Text = root.GetElementsByTagName("TugasPokok")[0].InnerText;
txt10.Text = root.GetElementsByTagName("Intelejen")[0].InnerText;
txt11.Text = root.GetElementsByTagName("Taktis")[0].InnerText;
txt12.Text = root.GetElementsByTagName("Personil")[0].InnerText;
txt13.Text = root.GetElementsByTagName("Logistik")[0].InnerText;
txt14.Text = root.GetElementsByTagName("Teritorial")[0].InnerText;
txt15.Text = root.GetElementsByTagName("Perhubungan")[0].InnerText;

正しい xml を読み込むと、xml はテキスト ボックスに正常に読み込まれますが、GetElementsByTagName一致しない場合、 「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。

並んで

txt10.Text = root.GetElementsByTagName("Intelejen")[0].InnerText;

一致しないかどうかを確認する方法GetElementsByTagName、要素が一致しない場合、アプリはメッセージを表示してロードをキャンセルしますか?

4

6 に答える 6

0

この拡張メソッドを使用して、コードをいくらか乾かすことができます

public static bool TryGetInnerText(this XmlElement root, string childName, out string text)
    {
         var children = root.GetElementsByTagName(childName);
         if(children.Count > 0){
               text = children[0].InnerText;
               return true;
         }
         text = null;
         return false;
    }

次に、次のように呼び出すことができます。

 if(!root.TryGetInnerText("Seksi", out txt1.Text)){
      //notify the uesr that the Seksi wasn't found
 }      

そしてそれはあなたのためにチェックも処理します

于 2013-11-04T12:05:06.740 に答える
-1

これを試して:

var element = root.GetElementsByTagName("Intelejen")[0];
if (element != null)
    txt10.Text = element.InnerText

説明:root.GetElementsByTagName("Intelejen")[0]要素が見つからない場合は null を返します。そのためInnerText、null 例外がスローされます

于 2013-11-04T10:11:21.890 に答える
-2

存在しない要素の null チェックを念頭に置いてください。存在しないものを割り当てることはできません。

txt1.Text = (root.GetElementsByTagName("Seksi")[0] != null) 
   ? root.GetElementsByTagName("Seksi")[0].InnerText 
   : String.Empty;
于 2013-11-04T10:12:59.503 に答える
-2
var elements = root.Elements("Seksi");
        if (elements.Any())
        {
            string txt = elements.First().Value;
        }
于 2013-11-04T10:25:29.677 に答える