XML ブール属性を (.NET で) 解析する最良の方法は何ですか?
-
06-07-2019 - |
質問
xs:boolean として宣言された XML 属性は、「true」、「false」、「0」、または「1」を受け入れることができます。ただし、.NET では、Boolean.Parse() は「true」または「false」のみを受け入れます。「0」または「1」を検出すると、「不正なフォーマット」例外がスローされます。
それでは、そのような値をブール値に解析する最良の方法は何でしょうか?
(残念ながら、私は .NET 2.0 ソリューションに限定されていますが、v3.5 で何かが提供されるのであれば、ぜひ知りたいです。)
解決
XmlConvert には、一般的な言語ランタイムタイプとXMLタイプ。特に XmlConvert.ToBoolean
はブール値を正確に処理します(有効な文字列は、trueの場合" 1"または" true"、falseの場合" 0"または" false"です)。
他のヒント
使用する CBool
の代わりに Boolean.Parse
トリックを実行する必要があります:に埋め込む必要がありますが、 try/catch
ブロック (使用時には必要ありません) Boolean.TryParse
)、true/false や 0/1 など、ほとんどの「意味のある」ブール値を正常に変換します。
編集:コメントで指摘されているように、この答えはC#プログラマーにとっては役に立たないものです。 CBool
VBイズムです。にマッピングされます Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean
, 、一般的な消費には適していません。これにより、受け入れられた回答で指摘されている XMLConvert クラスがさらに優れた代替手段になります。
データを解析する前にサニタイズします:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
true 、 false 、 0 、または 1 以外のエントリは、引き続き「不正な形式」をスローします;例外(あるべき)。
return value === 'true' || Number(value)