解析 XML 布尔属性(在 .NET 中)的最佳方法是什么?
声明为 xs:boolean 的 XML 属性可接受“true”、“false”、“0”或“1”。 但是,在 .NET 中,Boolean.Parse() 只接受“true”或“false”。 如果它看到“0”或“1”,则会抛出“错误格式”异常。
那么,考虑到这一点,将这样的值解析为布尔值的最佳方法是什么?
(不幸的是,我仅限于 .NET 2.0 解决方案,但如果 v3.5 提供了某些功能,我很想听听。)
An XML attribute declared as xs:boolean can acceptable be "true", "false", "0" or "1". However, in .NET, Boolean.Parse() will only accept "true" or "false". If it sees a "0" or "1", it throws a "Bad Format" exception.
So, given that, what's the best way to parse such a value into a Boolean?
(Unfortunately, I'm limited to .NET 2.0 solutions, but if v3.5 offers something, I'd love to hear about it.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我认为 XmlConvert 具有在公共语言运行时类型之间进行转换的所有方法和 XML 类型。 特别是
XmlConvert.ToBoolean
精确处理布尔值(有效字符串为“1”或“true”表示 true,“0”或“false”表示 false)。I think that XmlConvert has all the methods for converting between common language runtime types and XML types. Especially
XmlConvert.ToBoolean
handles exactly the boolean values (valid strings are "1" or "true" for true and "0" or "false" for false).使用 CBool 代替 Boolean.Parse 应该可以解决问题:尽管您必须将其嵌入到 try/catch 块中(这不会使用
Boolean.TryParse
时不需要),它将成功转换大多数“合理”布尔值,包括 true/false 和 0/1。编辑:正如评论中指出的,这个答案对于 C# 程序员来说有点无用,因为 CBool 是 VB 主义。 它映射到
Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean
,不适合一般使用。 这使得在接受的答案中指出的 XMLConvert 类成为更好的选择。Using
CBool
instead ofBoolean.Parse
should do the trick: although you'll have to embed it in atry/catch
block (which wouldn't be required when usingBoolean.TryParse
), it will successfully convert most 'sensible' boolean values, including true/false and 0/1.Edit: as pointed out in a comment, this answer is kinda useless for C# programmers, as
CBool
is a VB-ism. It maps toMicrosoft.VisualBasic.CompilerServices.Conversions::ToBoolean
, which is not suitable for general consumption. Which makes the XMLConvert class pointed out in the accepted answer an even better alternative.在尝试解析数据之前先清理数据:
除 true、false、0 或 1 之外的任何其他条目仍将抛出“格式错误”异常(应该如此)。
Sanitise the data before attempting to parse it:
Any other entry than true, false, 0 or 1 will still throw a "Bad Format" exception (as it should be).