it-swarm.com.ru

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

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

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

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

18
James Curran

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

35
Panos

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

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

2
mdb

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

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

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

0
Treb
return value === 'true' || Number(value)
0
Bananas