【问题标题】:What is the best way to parse an XML boolean attribute (in .NET)?解析 XML 布尔属性(在 .NET 中)的最佳方法是什么?
【发布时间】:2008-11-05 15:11:48
【问题描述】:

声明为 xs:boolean 的 XML 属性可接受为“true”、“false”、“0”或“1”。但是,在 .NET 中,Boolean.Parse() 将只接受“true”或“false”。如果它看到“0”或“1”,则会引发“错误格式”异常。

那么,鉴于此,将此类值解析为布尔值的最佳方法是什么?

(不幸的是,我仅限于 .NET 2.0 解决方案,但如果 v3.5 提供了一些东西,我很想听听。)

【问题讨论】:

    标签: .net xml .net-2.0 boolean xml-attribute


    【解决方案1】:

    我认为XmlConvert 具有在公共语言运行时类型和XML 类型之间进行转换的所有方法。尤其是XmlConvert.ToBoolean 精确处理布尔值(有效字符串是“1”或“true”表示真,“0”或“假”表示假)。

    【讨论】:

    • 优秀.. 正是我要找的东西(知道我应该花更多时间浏览 .Net 库参考)
    • 警惕像 True 和 False 这样的值,XmlConvert 将它们视为无效的布尔值。您也不能简单地使用简单的 ToLower() 来解决此问题,因为 XmlConvert 对其无法识别的任何值都会引发异常。 XmlConvert 不是灵丹妙药,而是一个有趣的工具。
    • @OwenIvory 根据 XML Schema 规范,像 True 和 False 这样的值确实是无效的布尔值:w3.org/TR/xmlschema-2/#boolean。另请参阅此问题中的讨论:stackoverflow.com/questions/1308491
    【解决方案2】:

    使用 CBool 而不是 Boolean.Parse 应该可以解决问题:尽管您必须将其嵌入到 try/catch 块中(使用 Boolean.TryParse 时不需要),它会成功转换大多数'sensible' 布尔值,包括真/假和 0/1。

    编辑:正如评论中指出的那样,这个答案对 C# 程序员来说有点没用,因为CBool 是一个 VB 主义。映射到Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean,不适合一般消费。这使得在接受的答案中指出的 XMLConvert 类成为更好的选择。

    【讨论】:

    • 我只看到为 VB6 定义的“CBool​​”,而不是为 .NET 定义的。 VB.NET 可能将其别名为某些 Microsoft.VisualBasic.* 方法,但我使用的是 C#,所以我需要知道要调用的底层方法。
    【解决方案3】:

    在尝试解析数据之前对其进行清理:

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

    truefalse01 之外的任何其他条目仍会抛出“错误格式”例外(应该如此)。

    【讨论】:

      【解决方案4】:
      return value === 'true' || Number(value)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-03
        • 2010-10-28
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        • 2011-11-30
        相关资源
        最近更新 更多