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

StackOverflow https://stackoverflow.com/questions/265425

Вопрос

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

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

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

Это было полезно?

Решение

Я думаю, что XmlConvert имеет все методы для преобразования между общими языковые типы времени выполнения и типы XML. Особенно XmlConvert.ToBoolean точно обрабатывает логические значения (допустимыми являются строки «1» или «true» для true и «0» или «false» для false).

Другие советы

Используя CBool вместо того, чтобы Boolean.Parse должно сработать:хотя вам придется встроить его в try/catch блок (который не потребуется при использовании Boolean.TryParse), он успешно преобразует большинство "разумных" логических значений, включая true / false и 0/1.

Редактировать:как указано в комментарии, этот ответ в некотором роде бесполезен для программистов на C #, поскольку CBool это VB-изм.Это соотносится с Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean, который не подходит для общего употребления.Это делает класс XmlConvert, указанный в принятом ответе, еще лучшей альтернативой.

Очистите данные перед попыткой их проанализировать.

 string InnerText = yourXmlNode.InnerText;    
if (InnerText.Equals("0"))
    InnerText = "false";
else if (InnerText.Equals("1"))
    InnerText = "true";

Любая другая запись, кроме true , false , 0 или 1 , все равно будет выбрасывать " Плохой формат " ; исключение (как и должно быть).

return value === 'true' || Number(value)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top