Каков наилучший способ проанализировать атрибут boolean XML (в .NET)?
Атрибут XML, объявленный как xs: boolean, может быть приемлемым: "true", "false", "0" или "1". Однако в .NET Boolean.Parse() будет принимать только "true" или "false". Если он видит "0" или "1", он выдает исключение "Плохой формат".
Итак, учитывая, что лучший способ разобрать такое значение в булевом?
(К сожалению, я ограничен решениями .NET 2.0, но если v3.5 предлагает что-то, я хотел бы услышать об этом.)
Ответы
Ответ 1
Я думаю, что XmlConvert содержит все методы для преобразования между типами времени выполнения Common Language и типами XML. Особенно XmlConvert.ToBoolean
обрабатывает точно логические значения (допустимые строки: "1" или "true" для true и "0" или "false" для ложь).
Ответ 2
Использование CBool
вместо Boolean.Parse
должно сделать трюк: хотя вам нужно встроить его в блок try/catch
(который не требуется при использовании Boolean.TryParse
), он успешно конвертирует большинство "разумные" логические значения, включая true/false и 0/1.
Изменить: как указано в комментарии, этот ответ бесполезен для программистов на С#, поскольку CBool
является VB-ism. Он отображается на Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean
, что не подходит для общего потребления. Что делает класс XMLConvert указанным в принятом ответе еще лучшей альтернативой.
Ответ 3
Санируйте данные перед попыткой его разбора:
string InnerText = yourXmlNode.InnerText;
if (InnerText.Equals("0"))
InnerText = "false";
else if (InnerText.Equals("1"))
InnerText = "true";
Любая другая запись, кроме true, false, 0 или 1 будет по-прежнему вызывать исключение "Bad Format" (как и должно быть).
Ответ 4
return value === 'true' || Number(value)