0

XML ストリームを解析するために ac# 関数を作成しました。私の XML は複数のノードを持つことができます。

例 :

<Stream>
 <One>nnn</One>
 <Two>iii</Two>
 <Three>jjj</Three>
</Stream>

しかし、時々、それは:

<Stream>
 <Two>iii</Two>
</Stream>

ここに私のC#コードがあります:

var XML = from item in XElement.Parse(strXMLStream).Descendants("Stream") select item;
string strOne = string.Empty;
string strTwo = string.Empty;
string strThree =  string.Empty;

if ((item.Element("One").Value != "")
{
   strOne = item.Element("One").Value;
}

if ((item.Element("Two").Value != "")
{
   strTwo = item.Element("Two").Value;
}

if ((item.Element("Three").Value != "")
{
   strThree = item.Element("Three").Value;
}

このコードでは、ストリームがいっぱい (ノード オン、2、3) の場合でも問題ありません。ただし、ストリームにノード「Two」しかない場合は、NullReferenceException.

この例外を回避する方法はありますか (ストリームを変更できません)。

どうもありがとう :)

4

3 に答える 3

1

プロパティにアクセスする前に、item.Element("anything")であるかどうかを確認する必要があります。nullValue

if (item.Element("Three") != null && item.Element("Three").Value != "")
于 2013-01-20T12:02:27.777 に答える
1

あなたがする必要があります:

if (item.Element("One") != null)
{
   strOne = item.Element("One").Value;
}

.Element(String)null要求した名前の要素が存在しない場合に返されます。

!= ""が無意味かどうかを確認します。防止しているのは、strOneすでに空の文字列である変数に空の文字列を再割り当てすることだけだからです。また、空の文字列のチェックが本当に必要な場合String.IsNullOrEmpty(String)は、メソッドを使用することをお勧めします。

于 2013-01-20T11:58:19.007 に答える
1

Valueプロパティにアクセスする代わりに(NullReferenceExceptionご存知のとおり、要素が存在しない場合に発生します)、要素を文字列にキャストします。??存在しない要素のデフォルト値を提供するために使用できます。

string strOne = (string)item.Element("One") ?? String.Empty;
string strTwo = (string)item.Element("Two") ?? String.Empty;
string strThree =  (string)item.Element("Three") ?? String.Empty;
于 2013-01-20T12:36:24.700 に答える