Подтвердить что ты не робот

Каков наилучший способ проанализировать атрибут boolean XML (в .NET)?

Атрибут XML, объявленный как xs: boolean, может быть приемлемым: "true", "false", "0" или "1". Однако в .NET Boolean.Parse() будет принимать только "true" или "false". Если он видит "0" или "1", он выдает исключение "Плохой формат".

Итак, учитывая, что лучший способ разобрать такое значение в булевом?

(К сожалению, я ограничен решениями .NET 2.0, но если v3.5 предлагает что-то, я хотел бы услышать об этом.)

4b9b3361

Ответ 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)