CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 178

178
Chương 5: XML

}

8.

8.

Xác nh n tính h p l c a m t tài li u XML d a trên m t

ợ ệ ủ ộ

Xác nh n tính h p l c a m t tài li u XML d a trên m t

ợ ệ ủ ộ

Schema

Schema

Bạn cần xác nhận tính hợp lệ của một tài liệu XML bằng cách bảo đảm nó tuân
theo một XML Schema
.

Sử dụng lớp

System.Xml.XmlValidatingReader

. Tạo

một thể hiện của lớp này, nạp

Schema vào tập hợp

XmlValidatingReader.Schemas

, dịch chuyển qua từng nút

một bằng cách gọi

XmlValidatingReader.Read

, và bắt bất cứ ngoại lệ nào. Để tìm

tất cả các lỗi trong một tài liệu mà không phải bắt ngoại lệ, hãy thụ lý sự kiện

ValidationEventHandler

.

Một XML Schema (giản đồ XML) định nghĩa các quy tắc mà một kiểu tài liệu XML cho trước
phải tuân theo. Các quy tắc này định nghĩa:

Các phần tử và đặc tính có thể xuất hiện trong tài liệu.

Các kiểu dữ liệu cho phần tử và đặc tính.

Cấu trúc của tài liệu, bao gồm các phần tử nào là con của các phần tử khác.

Thứ tự và số lượng các phần tử con xuất hiện trong tài liệu.

Các phần tử nào là rỗng, có thể chứa text, hay đòi hỏi các giá trị cố định.

Bàn sâu về các tài liệu XML Schema vượt quá phạm vi của chương này, nhưng bạn có thể tìm
hiểu nó thông qua một ví dụ đơn giản. Mục này sẽ sử dụng tài liệu XML mô tả danh mục sản
phẩm đã được trình bày trong mục 5.1.
Ở mức cơ bản nhất, XML Schema Definition (XSD) được sử dụng để định nghĩa các phần tử
có thể xuất hiện trong tài liệu XML. Bản thân tài liệu XSD được viết theo dạng XML, và bạn sử
dụng một phần tử đã được định nghĩa trước (có tên là

<element>

) để chỉ định các phần tử sẽ

cần thiết trong tài liệu đích. Đặc tính

type

cho biết kiểu dữ liệu. Ví dụ dưới đây là tên sản

phẩm:

<xsd:element name="productName" type="xsd:string" />

Và ví dụ dưới đây là giá sản phẩm:

<xsd:element name="productPrice" type="xsd:decimal" />

Bạn có thể tìm hiểu các kiểu dữ liệu Schema tại

[

http://www.w3.org/TR/xmlschema-2]

. Chúng

ánh xạ đến các kiểu dữ liệu .NET và bao gồm

string

,

int

,

long

,

decimal

,

float

,

dateTime

,

boolean

,

base64Binary

...

Cả

productName

productPrice

đều là các kiểu đơn giản vì chúng chỉ chứa dữ liệu dạng ký

tự. Các phần tử có chứa các phần tử lồng bên trong được gọi là các kiểu phức tạp. Bạn có thể
lồng chúng vào nhau bằng thẻ

<sequence>

(nếu thứ tự là quan trọng) hay thẻ

<all>

(nếu thứ tự

là không quan trọng). Dưới đây là cách lắp phần tử

<product>

vào danh mục sản phẩm. Chú ý

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.