2008-11-05 7 views
18

Thuộc tính XML được khai báo là xs: boolean có thể chấp nhận là "true", "false", "0" hoặc "1". Tuy nhiên, trong .NET, Boolean.Parse() sẽ chỉ chấp nhận "true" hoặc "false". Nếu nó thấy "0" hoặc "1", nó sẽ ném ngoại lệ "Định dạng không hợp lệ".Cách tốt nhất để phân tích một thuộc tính boolean XML (trong .NET) là gì?

Vì vậy, cho rằng, cách tốt nhất để phân tích cú pháp giá trị đó thành một Boolean là gì?

(Thật không may, tôi đang giới hạn trong .NET 2.0 giải pháp, nhưng nếu v3.5 cung cấp một cái gì đó, tôi rất muốn nghe về nó.)

Trả lời

35

Tôi nghĩ rằng XmlConvert có tất cả các phương pháp để chuyển đổi giữa các kiểu thời gian chạy ngôn ngữ phổ biến và các loại XML. Đặc biệt, XmlConvert.ToBoolean xử lý chính xác các giá trị boolean (các chuỗi hợp lệ là "1" hoặc "true" cho true và "0" hoặc "false" cho false).

+0

Tuyệt vời .. Chính xác những gì tôi đang tìm kiếm (biết tôi nên dành nhiều thời gian hơn thông qua Tham khảo Thư viện Net). –

2

Sử dụng CBool thay vì Boolean.Parse nên làm các trick: mặc dù bạn sẽ phải nhúng nó vào khối try/catch (không bắt buộc khi sử dụng Boolean.TryParse), nó sẽ chuyển đổi thành công hầu hết các giá trị boolean 'hợp lý', bao gồm true/false và 0/1.

Chỉnh sửa: như được chỉ ra trong nhận xét, câu trả lời này là vô ích đối với các lập trình viên C#, vì CBool là VB-ism. Nó ánh xạ tới Microsoft.VisualBasic.CompilerServices.Conversions::ToBoolean, không phù hợp với mức tiêu thụ chung. Điều này làm cho lớp XMLConvert chỉ ra trong câu trả lời được chấp nhận là một lựa chọn tốt hơn nữa.

+0

Tôi chỉ thấy "CBool" được xác định cho VB6, không phải cho .NET. Có thể là VB.NET đang đặt bí danh nó cho một số phương thức Microsoft.VisualBasic. *, Nhưng tôi đang sử dụng C#, vì vậy tôi cần biết phương thức cơ bản để gọi. –

0

Vệ sinh dữ liệu trước khi cố gắng phân tích nó:

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

Bất kỳ nhập khác hơn đúng, sai, hoặc vẫn sẽ ném một "Bad Format" ngoại lệ (như nó nên được).

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