Quel est le meilleur moyen d'analyser un attribut XML booléen (en .NET)?
-
06-07-2019 - |
Question
Un attribut XML déclaré comme xs: boolean peut être accepté comme étant "vrai", "faux", "0". ou "1". Cependant, dans .NET, Boolean.Parse () acceptera uniquement "true". ou "faux". S'il voit un " 0 " ou "1", il jette un "Mauvais format" exception.
Dans ce cas, quel est le meilleur moyen d’analyser une telle valeur dans un booléen?
(Malheureusement, je suis limité aux solutions .NET 2.0, mais si la v3.5 offre quelque chose, j'aimerais en entendre parler.)
La solution
Je pense que XmlConvert possède toutes les méthodes de conversion entre commun types d'exécution de langage et types XML. En particulier, XmlConvert.ToBoolean
a> gère exactement les valeurs booléennes (les chaînes valides sont "1" ou "true" pour true et "0" ou "false" pour false).
Autres conseils
Utiliser CBool ??
au lieu de Boolean.Parse
devrait faire l'affaire: bien que vous deviez l'intégrer dans un bloc try / catch
(ce qui ne serait pas nécessaire avec Boolean.TryParse
), il convertira avec succès la plupart des valeurs booléennes "sensibles", y compris true / false et 0/1.
Edit: comme indiqué dans un commentaire, cette réponse est un peu inutile pour les programmeurs C #, car CBool ??
est un VB-ism. Il correspond à Microsoft.VisualBasic.CompilerServices.Conversions :: ToBoolean
, qui ne convient pas à la consommation générale. Ce qui fait de la classe XMLConvert indiquée dans la réponse acceptée une alternative encore meilleure.
Désinfectez les données avant de tenter de les analyser:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
Toute autre entrée que true , false , 0 ou 1 lancera toujours un "format incorrect". ; exception (comme il se doit).
return value === 'true' || Number(value)