20

xs:boolean として宣言された XML 属性は、「true」、「false」、「0」、または「1」として受け入れられます。ただし、.NET では、Boolean.Parse() は「true」または「false」のみを受け入れます。「0」または「1」が表示されると、「Bad Format」例外がスローされます。

では、そのような値をブール値に解析する最良の方法は何ですか?

(残念ながら、私は .NET 2.0 ソリューションに限定されていますが、v3.5 で何かが提供される場合は、ぜひお知らせください。)

4

4 に答える 4

37

XmlConvertには、共通言語ランタイム型と XML 型の間で変換するためのすべてのメソッドがあると思います。特にXmlConvert.ToBooleanブール値を正確に処理します (有効な文字列は、true の場合は「1」または「true」、false の場合は「0」または「false」です)。

于 2008-11-05T15:19:03.767 に答える
2

CBoolの代わりに を使用すると、Boolean.Parseうまくいくはずです: ブロックに埋め込む必要がありますがtry/catch( を使用する場合は必要ありませんBoolean.TryParse)、true/false や 0/1 を含むほとんどの「適切な」ブール値を正常に変換します。

編集: コメントで指摘されているように、この回答は C# プログラマーにとっては役に立たないものでCBoolあり、VB-ism と同様です。Microsoft.VisualBasic.CompilerServices.Conversions::ToBooleanこれは、一般消費には適していないにマップされます。これにより、受け入れられた回答で指摘された XMLConvert クラスがさらに優れた代替手段になります。

于 2008-11-05T15:16:16.473 に答える
0

解析を試みる前にデータをサニタイズします。

 string InnerText = yourXmlNode.InnerText;    
if (InnerText.Equals("0"))
    InnerText = "false";
else if (InnerText.Equals("1"))
    InnerText = "true";

truefalse0または1以外のエントリは、「不正な形式」例外をスローします (そうあるべきです)。

于 2008-11-05T15:27:04.157 に答える