¿Cuál es la mejor manera de analizar un atributo booleano XML (en .NET)?
-
06-07-2019 - |
Pregunta
Un atributo XML declarado como xs: boolean puede ser aceptable '' verdadero '', '' falso '', '' 0 '' o "1". Sin embargo, en .NET, Boolean.Parse () solo aceptará " verdadero " o "falso". Si ve un '' 0 '' o "1", arroja un "Formato incorrecto" excepción.
Entonces, dado que, ¿cuál es la mejor manera de analizar dicho valor en un booleano?
(Desafortunadamente, estoy limitado a las soluciones .NET 2.0, pero si v3.5 ofrece algo, me encantaría saberlo).
Solución
Creo que XmlConvert tiene todos los métodos para convertir entre comunes tipos de tiempo de ejecución de lenguaje y tipos XML. Especialmente XmlConvert.ToBoolean
maneja exactamente los valores booleanos (las cadenas válidas son " 1 " o " true " para true y " 0 " o " false " para false).
Otros consejos
Usar CBool ??
en lugar de Boolean.Parse
debería ser el truco: aunque tendrá que incrustarlo en un bloque try / catch
(que no sería necesario cuando se usa Boolean. TryParse
), convertirá con éxito la mayoría de los valores booleanos 'sensibles', incluidos verdadero / falso y 0/1.
Editar: como se señaló en un comentario, esta respuesta es un poco inútil para los programadores de C #, ya que CBool ??
es un VB-ism. Se asigna a Microsoft.VisualBasic.CompilerServices.Conversions :: ToBoolean
, que no es adecuado para el consumo general. Lo que hace que la clase XMLConvert señalada en la respuesta aceptada sea una alternativa aún mejor.
Desinfecte los datos antes de intentar analizarlos:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
Cualquier otra entrada que no sea verdadero , falso , 0 o 1 aún arrojará un " Formato incorrecto " ; excepción (como debería ser).
return value === 'true' || Number(value)