Каков наилучший способ анализа логического атрибута XML (в .NET)? - PullRequest
18 голосов
/ 05 ноября 2008

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

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

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

Ответы [ 4 ]

35 голосов
/ 05 ноября 2008

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

2 голосов
/ 05 ноября 2008

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

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

0 голосов
/ 09 апреля 2013
return value === 'true' || Number(value)
0 голосов
/ 05 ноября 2008

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

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

Любая запись, отличная от true , false , 0 или 1 , все равно вызовет исключение «Bad Format» (как это должно быть).

...