175
Chương 5: XML
position
Hàm này thu lấy các phần tử dựa vào vị trí.
/Order/Items/Item[position()=2]
chọn phần tử
Item
thứ hai.
count
Hàm này đếm số phần tử. Bạn cần chỉ định tên của phần tử con cần đếm
hoặc dấu hoa thị (
*
) cho tất cả các phần tử con.
/Order/Items/Item[count(Price)=1]
thu lấy các phần tử
Item
có đúng một
phần tử
Price
lồng bên trong.
Biểu thức XPath và tất cả tên phần tử và đặc tính mà bạn sử dụng trong đó luôn
có phân biệt chữ hoa-thường, vì bản thân XML có phân biệt chữ hoa-thường.
7.
7.
Đ c và ghi XML mà không ph i n p toàn b tài li u vào b nh
ọ
ả ạ
ộ
ệ
ộ ớ
Đ c và ghi XML mà không ph i n p toàn b tài li u vào b nh
ọ
ả ạ
ộ
ệ
ộ ớ
Bạn cần đọc XML từ một stream, hoặc ghi nó ra một stream. Tuy nhiên, bạn
muốn xử lý từng nút một, không phải nạp toàn bộ vào bộ nhớ với một
XmlDocument
.
Để ghi XML, hãy tạo một
XmlTextWriter
bọc lấy một stream và sử dụng các
phương thức
Write
(như
WriteStartElement
và
WriteEndElement
). Để đọc XML,
hãy tạo một
XmlTextReader
bọc lấy một stream và gọi phương thức
Read
để dịch
chuyển từ nút này sang nút khác.
Lớp
XmlTextWriter
và
XmlTextReader
đọc/ghi XML trực tiếp từ stream từng nút một. Các lớp
này không cung cấp các tính năng dùng để duyệt và thao tác tài liệu XML như
XmlDocument
,
nhưng hiệu năng cao hơn và vết bộ nhớ nhỏ hơn, đặc biệt khi bạn làm việc với các tài liệu
XML cực kỳ lớn.
Để ghi XML ra bất kỳ stream nào, bạn có thể sử dụng
XmlTextWriter
. Lớp này cung cấp các
phương thức
Write
dùng để ghi từng nút một, bao gồm:
•
WriteStartDocument
—ghi phần khởi đầu của tài liệu; và
WriteEndDocument
, đóng bất
kỳ phần tử nào đang mở ở cuối tài liệu.
•
WriteStartElement
—ghi một thẻ mở (opening tag) cho phần tử bạn chỉ định. Kế đó,
bạn có thể thêm nhiều phần tử lồng bên trong phần tử này, hoặc bạn có thể gọi
WriteEndElement
để ghi thẻ đóng (closing tag).
•
WriteElementString
—ghi một phần tử, cùng với một thẻ mở, một thẻ đóng, và nội
dung text.
•
WriteAttributeString
—ghi một đặc tính cho phần tử đang mở gần nhất, cùng với tên
và giá trị.
Sử dụng các phương thức này thường cần ít mã lệnh hơn là tạo một
XmlDocument
bằng tay,
như được trình bày trong mục 5.2 và 5.3.
Để đọc XML, bạn sử dụng phương thức
Read
của
XmlTextReader
. Phương thức này tiến reader
đến nút kế tiếp, và trả về
true
. Nếu không còn nút nào nữa, nó sẽ trả về
false
. Bạn có thể thu
lấy thông tin về nút hiện tại thông qua các thuộc tính của
XmlTextReader
(bao gồm
Name
,
Value
, và
NodeType
).