2008-11-05 5 views
18

Ein XML-Attribut, das als xs: boolean deklariert wird, kann als "wahr", "falsch", "0" oder "1" akzeptiert werden. In .NET akzeptiert Boolean.Parse() jedoch nur "True" oder "False". Wenn es eine "0" oder "1" sieht, löst es eine "Bad Format" Ausnahme aus.Was ist der beste Weg, um ein boolesches XML-Attribut (in .NET) zu analysieren?

Also, was ist der beste Weg, um einen solchen Wert in einen Boolean zu analysieren?

(Leider bin ich zu .NET 2.0-Lösungen beschränkt, aber wenn v3.5 etwas bietet, würde ich gerne davon hören.)

Antwort

35

Ich denke, dass XmlConvert alle Methoden für die Konvertierung zwischen Common Language Runtime-Typen und XML-Typen hat. Speziell XmlConvert.ToBoolean behandelt genau die booleschen Werte (gültige Strings sind "1" oder "wahr" für wahr und "0" oder "falsch" für falsch).

+0

Exzellent .. Genau das, wonach ich gesucht habe (wusste, dass ich mehr Zeit mit dem Stöbern in der .Net-Bibliotheksreferenz hätte verbringen sollen) –

2

Mit CBool statt Boolean.Parse sollte es tun: obwohl Sie müssen es in einen try/catch Block einbetten (was nicht erforderlich wäre, wenn Sie Boolean.TryParse verwenden), es wird erfolgreich die meisten "vernünftigen" booleschen Werte konvertieren, einschließlich True/False und 0/1.

Edit: wie in einem Kommentar hingewiesen, ist diese Antwort für C# -Programmierer irgendwie unbrauchbar, da CBool ein VB-ism ist. Es entspricht Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean, die nicht für den allgemeinen Verbrauch geeignet ist. Das macht die XMLconvert-Klasse in der akzeptierten Antwort zu einer noch besseren Alternative.

+0

Ich sehe nur "CBool" für VB6, nicht für .NET definiert. Es ist möglich, dass VB.NET es zu einer Microsoft.VisualBasic. * -Methode führt, aber ich benutze C#, also müsste ich diese zugrunde liegende Methode kennen. –

0

Sanitize die Daten, bevor sie analysieren:

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

All anderer Eintrag als wahr, falsch, oder noch eine "Bad-Format" Ausnahme ausgelöst wird (wie es sollte sein).

0
return value === 'true' || Number(value) 
Verwandte Themen