180
Chương 5: XML
<xsd:complexType>
<xsd:sequence>
<xsd:element name="product" type="product"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Lớp
XmlValidatingReader
thực thi tất cả các quy tắc Schema này—bảo đảm tài liệu là hợp lệ
—và nó cũng kiểm tra tài liệu XML đã được chỉnh dạng hay chưa (nghĩa là không có các ký tự
bất hợp lệ, tất cả các thẻ mở đều có một thẻ đóng tương ứng, v.v...). Để kiểm tra một tài liệu,
hãy dùng phương thức
XmlValidatingReader.Read
để duyệt qua từng nút một. Nếu tìm thấy
lỗi,
XmlValidatingReader
dựng lên sự kiện
ValidationEventHandler
với các thông tin về lỗi.
Nếu muốn, bạn có thể thụ lý sự kiện này và tiếp tục kiểm tra tài liệu để tìm thêm lỗi. Nếu bạn
không thụ lý sự kiện này, ngoại lệ
XmlException
sẽ được dựng lên khi bắt gặp lỗi đầu tiên và
quá trình kiểm tra sẽ bị bỏ dở. Để kiểm tra một tài liệu đã được chỉnh dạng hay chưa, bạn có
thể sử dụng
XmlValidatingReader
mà không cần đến Schema.
Ví dụ kế tiếp trình bày một lớp tiện ích dùng để hiển thị tất cả các lỗi trong một tài liệu XML
khi phương thức
ValidateXml
được gọi. Các lỗi sẽ được hiển thị trong một cửa sổ Console, và
một biến luận lý được trả về để cho biết quá trình kiểm tra thành công hay thất bại.
using System;
using System.Xml;
using System.Xml.Schema;
public class ConsoleValidator {
// Thiết lập thành true nếu tồn tại ít nhất một lỗi.
private bool failed;
public bool Failed {
get {return failed;}
}