Qual è il modo migliore per analizzare un attributo booleano XML (in .NET)?
-
06-07-2019 - |
Domanda
Un attributo XML dichiarato come xs: booleano può essere accettabile come "vero", "falso", "0". o "1". Tuttavia, in .NET, Boolean.Parse () accetterà solo " true " o "falso". Se vede un " 0 " o "1", genera un "Formato errato" fa eccezione.
Quindi, dato ciò, qual è il modo migliore per analizzare un tale valore in un booleano?
(Sfortunatamente, sono limitato alle soluzioni .NET 2.0, ma se la v3.5 offre qualcosa, mi piacerebbe saperlo.)
Soluzione
Penso che XmlConvert ha tutti i metodi per la conversione tra comuni tipi di runtime della lingua e tipi XML. Soprattutto XmlConvert.ToBoolean
gestisce esattamente i valori booleani (le stringhe valide sono "1" o "vero" per vero e "0" o "falso" per falso).
Altri suggerimenti
Usare CBool ??
invece di Boolean.Parse
dovrebbe fare il trucco: anche se dovrai incorporarlo in un blocco try / catch
(che non sarebbe necessario quando si utilizza Boolean. TryParse
), convertirà con successo la maggior parte dei valori booleani "sensibili", inclusi true / false e 0/1.
Modifica: come sottolineato in un commento, questa risposta è un po 'inutile per i programmatori C #, poiché CBool ??
è un VB-ism. Si associa a Microsoft.VisualBasic.CompilerServices.Conversions :: ToBoolean
, che non è adatto al consumo generale. Il che rende la classe XMLConvert indicata nella risposta accettata un'alternativa ancora migliore.
Disinfetta i dati prima di tentare di analizzarli:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
Qualsiasi altra voce diversa da vero , falso , 0 o 1 genererà comunque un formato errato " ; eccezione (come dovrebbe essere).
return value === 'true' || Number(value)