Thao tác XML - Đọc và ghi Streamed XML – Phần 1
Số trang: 13
Loại file: pdf
Dung lượng: 115.02 KB
Lượt xem: 14
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Giờ đây chúng ta đã biết những gì có thể thực hiện được, vậy hãy xem .NET hỗ trợ những gì. Chúng ta sẽ bắt đầu bằng việc chỉ ra cách đọc và viết XML. Các lớp XmlReader và XmlWriter có vẻ như quen thuộc với những ai đã từng dùng SAX. Các lớp xuất phát từ XmlReader cung cấp một khả năng nhanh, chỉ tiến tới (không cho quay lui), chỉ đọc các dòng dữ liệu XML cho việc xử lí. Vì nó là mô hình luồng nên không đòi hỏi khắc khe về bộ nhớ. Dĩ nhiên,...
Nội dung trích xuất từ tài liệu:
Thao tác XML - Đọc và ghi Streamed XML – Phần 1 Thao tác XMLĐọc và ghi Streamed XML – Phần 1Giờ đây chúng ta đã biết những gì có thể thực hiện được, vậy hãy xem .NEThỗ trợ những gì. Chúng ta sẽ bắt đầu bằng việc chỉ ra cách đọc và viết XML.Các lớp X mlReader và XmlWriter có vẻ như quen thuộc với những ai đãtừng dùng SAX. Các lớp xuất phát từ XmlReader cung cấp một khả năngnhanh, chỉ tiến tới (không cho quay lui), chỉ đọc các dòng dữ liệu XML choviệc xử lí. Vì nó là mô hình luồng nên không đòi hỏi khắc khe về bộ nhớ. Dĩnhiên, bạn không có khả năng định hướng và khả năng đọc ghi vì nó khôngđược hỗ trợ trong mô hình DOM. Các lớp xuất phát từ XmlWriter sẽ tạo ramột tài liệu XML phù hợp với các chuẩn của không gian tên W3Cs XML1.0.Cả hai lớp XmlReader và XmlWriter đều là những lớp trừu tượng. Hình vẻdưới đây chỉ ra các lớp được thừa kế từ XmlReader và XmlWriter:XmlTextReader và XmlTextWriter làm việc chung trên các đối tượng luồnghoặc các đối tượng TextReader/TextWriter trong không gian tên System.IO.XmlNodeReader sử dụng một XmlNode như là nguồn thay cho một stream.XmlValidatingReader thêm DTD và sơ đồ thích hợp và tất nhiên cả dữ liệuhợp lệ. Chúng ta sẽ xem xét nó kĩ hơn trong phần sau của chương.Sử dụng lớp XmlTextReaderMột lần nữa, XmlTextReader trong rất giống SAX. Một trong những khácbiệt lớn nhất là: SAX là một mô hình kiểu push (có nghĩa là, nó đẩy dữ liệura khỏi ứng dụng, và phát triển sẵn sàng nhận nó), còn X mlTextReader làmột mô hình pull, ở đó dữ liệu được kéo vào ứng dụng yêu cầu nó. Nó tạo ramột mô hình lập trình dễ dàng và trực quan hơn. Một lợi ích khác là một môhình pull có thể lựa chọn dữ liệu để gởi đến ứng dụng: nếu bạn không muốntất cả dữ liệu, vì không cần sử lí tất cả chúng. Trong một mô hình push, tấtcả dữ liệu XML cần phải được xử lí bởi ứng dụng mặc cho nó muốn haykhông.Nào hãy xem xét một ví dụ đơn giản về đọc dữ liệu XML,và sau đó xem xétkĩ hơn lớp XmlTextReader. Bạn sẽ tìm thấy mã trong thư mụcXmlReaderSample1. Thay vì dùng không gian tên MSXML2 như ví dụ trên,chúng ta sẽ làm như sau:using System.Xml;Chúng ta cũng cần bỏ dòng sau khỏi mã nguồn:private DOMDocument40 doc;Đây là sự kiện click của button:protected void button1_Click (object sender, System.EventArgs e){ //Modify this path to find books.xml string fileName = ..\..\..\books.xml; //Create the new TextReader Object XmlTextReader tr = new XmlTextReader(fileName); //Read in a node at a time while(tr.Read()) { if(tr.NodeType == XmlNodeType.Text) listBox1.Items.Add(tr.Value); }}XmlTextReader này khá đơn giản. Trước tiên chúng ta tạo một đối tượngstring chứa tên đường dẫn của file XML. Sau đó chúng ta tạo mộtXmlTextReader mới với chuỗi truyền fileName. XmlTextReader có mười baquá tải. Chúng ta có thể kết hợp các chuỗi truyền khác nhau (file names vàURLs), streams và NameTables (khi một thành phần của thuộc tính tên xảyra một vài lần, nó có thể được lưu trong một NameTable, để cho phép sosánh nhanh hơn).Ngay sau khi một đối tượng XmlTextReader được khởi tạo không có mục nào đượcchọn. Không có mục hiện hành. khi chúng ta bước vào vòng lặp tr.Read(), phươngRead() sẽ di chuyển sang mục đầu tiên trong tài liệu. Nó tiêu biểu cho các mụckhai báo XML. Trong ví dụ này, chúng ta duyệt qua từng mục và so sánh tr.NodeTypevới bộ XmlNodeType, và thêm các mục được tìm thấy vào listbox. Đây là màn hìnhsau khi listbox được load:Các phương thức ReadCó một vài cách để di chuyển trong tài liệu. Như bạn đã thấy, Read() có cóthể di chuyển sang mục tiếp theo. Chúng ta có thể xem nêu mục đó có mộtgiá trị (HasValue()) hoặc, hoặc nếu mục đó có các thuộc tính cũng có thể dùng phương thức(HasAttributes()). Chúng taReadStartElement(), để kiểm tra xem nếu mục hiện tại là thành phần khởiđầu, và chuyển sang mục tiếp theo. Nếu không phải là mục khởi đầu mộtngoại lệ XmlException sẽ được phát ra. Việc gọi phương thức này giốngnhư gọi phương thức IsStartElement(), bởi một Read().Các phương thức ReadString() và ReadChars() đều đọc dữ liệu văn bản từmột thành tố. ReadString() tra về một chuỗi dữ liệu, trong khi ReadChars()trả về một mảng dữ liệu kiểu char.ReadElementString() cũng giống như ReadString(), ngoại trừ việc bạnkhông phải truyền tên của một thành tố. Nếu nội dung của mục tiếp theokhông phải là một start tag, hoặc nếu tham số Name không không phải làName của mục hiện hành, thì một ngoại lệ sẽ được phát ra.Đây là ví dụ chỉ ra cách sử dụng ReadElementString() (Bạn có thể tìm thấymã trong thư mục XmlReaderSample2). Chú ý rằng ví dụ này sử dụngFileStreams, vì vậy bạn cần phải bảo đảm rằng đã include không gian tênSystem.IO trong câu lệnh using.protected void button1_Click (object sender, System.EventArgs e) ...
Nội dung trích xuất từ tài liệu:
Thao tác XML - Đọc và ghi Streamed XML – Phần 1 Thao tác XMLĐọc và ghi Streamed XML – Phần 1Giờ đây chúng ta đã biết những gì có thể thực hiện được, vậy hãy xem .NEThỗ trợ những gì. Chúng ta sẽ bắt đầu bằng việc chỉ ra cách đọc và viết XML.Các lớp X mlReader và XmlWriter có vẻ như quen thuộc với những ai đãtừng dùng SAX. Các lớp xuất phát từ XmlReader cung cấp một khả năngnhanh, chỉ tiến tới (không cho quay lui), chỉ đọc các dòng dữ liệu XML choviệc xử lí. Vì nó là mô hình luồng nên không đòi hỏi khắc khe về bộ nhớ. Dĩnhiên, bạn không có khả năng định hướng và khả năng đọc ghi vì nó khôngđược hỗ trợ trong mô hình DOM. Các lớp xuất phát từ XmlWriter sẽ tạo ramột tài liệu XML phù hợp với các chuẩn của không gian tên W3Cs XML1.0.Cả hai lớp XmlReader và XmlWriter đều là những lớp trừu tượng. Hình vẻdưới đây chỉ ra các lớp được thừa kế từ XmlReader và XmlWriter:XmlTextReader và XmlTextWriter làm việc chung trên các đối tượng luồnghoặc các đối tượng TextReader/TextWriter trong không gian tên System.IO.XmlNodeReader sử dụng một XmlNode như là nguồn thay cho một stream.XmlValidatingReader thêm DTD và sơ đồ thích hợp và tất nhiên cả dữ liệuhợp lệ. Chúng ta sẽ xem xét nó kĩ hơn trong phần sau của chương.Sử dụng lớp XmlTextReaderMột lần nữa, XmlTextReader trong rất giống SAX. Một trong những khácbiệt lớn nhất là: SAX là một mô hình kiểu push (có nghĩa là, nó đẩy dữ liệura khỏi ứng dụng, và phát triển sẵn sàng nhận nó), còn X mlTextReader làmột mô hình pull, ở đó dữ liệu được kéo vào ứng dụng yêu cầu nó. Nó tạo ramột mô hình lập trình dễ dàng và trực quan hơn. Một lợi ích khác là một môhình pull có thể lựa chọn dữ liệu để gởi đến ứng dụng: nếu bạn không muốntất cả dữ liệu, vì không cần sử lí tất cả chúng. Trong một mô hình push, tấtcả dữ liệu XML cần phải được xử lí bởi ứng dụng mặc cho nó muốn haykhông.Nào hãy xem xét một ví dụ đơn giản về đọc dữ liệu XML,và sau đó xem xétkĩ hơn lớp XmlTextReader. Bạn sẽ tìm thấy mã trong thư mụcXmlReaderSample1. Thay vì dùng không gian tên MSXML2 như ví dụ trên,chúng ta sẽ làm như sau:using System.Xml;Chúng ta cũng cần bỏ dòng sau khỏi mã nguồn:private DOMDocument40 doc;Đây là sự kiện click của button:protected void button1_Click (object sender, System.EventArgs e){ //Modify this path to find books.xml string fileName = ..\..\..\books.xml; //Create the new TextReader Object XmlTextReader tr = new XmlTextReader(fileName); //Read in a node at a time while(tr.Read()) { if(tr.NodeType == XmlNodeType.Text) listBox1.Items.Add(tr.Value); }}XmlTextReader này khá đơn giản. Trước tiên chúng ta tạo một đối tượngstring chứa tên đường dẫn của file XML. Sau đó chúng ta tạo mộtXmlTextReader mới với chuỗi truyền fileName. XmlTextReader có mười baquá tải. Chúng ta có thể kết hợp các chuỗi truyền khác nhau (file names vàURLs), streams và NameTables (khi một thành phần của thuộc tính tên xảyra một vài lần, nó có thể được lưu trong một NameTable, để cho phép sosánh nhanh hơn).Ngay sau khi một đối tượng XmlTextReader được khởi tạo không có mục nào đượcchọn. Không có mục hiện hành. khi chúng ta bước vào vòng lặp tr.Read(), phươngRead() sẽ di chuyển sang mục đầu tiên trong tài liệu. Nó tiêu biểu cho các mụckhai báo XML. Trong ví dụ này, chúng ta duyệt qua từng mục và so sánh tr.NodeTypevới bộ XmlNodeType, và thêm các mục được tìm thấy vào listbox. Đây là màn hìnhsau khi listbox được load:Các phương thức ReadCó một vài cách để di chuyển trong tài liệu. Như bạn đã thấy, Read() có cóthể di chuyển sang mục tiếp theo. Chúng ta có thể xem nêu mục đó có mộtgiá trị (HasValue()) hoặc, hoặc nếu mục đó có các thuộc tính cũng có thể dùng phương thức(HasAttributes()). Chúng taReadStartElement(), để kiểm tra xem nếu mục hiện tại là thành phần khởiđầu, và chuyển sang mục tiếp theo. Nếu không phải là mục khởi đầu mộtngoại lệ XmlException sẽ được phát ra. Việc gọi phương thức này giốngnhư gọi phương thức IsStartElement(), bởi một Read().Các phương thức ReadString() và ReadChars() đều đọc dữ liệu văn bản từmột thành tố. ReadString() tra về một chuỗi dữ liệu, trong khi ReadChars()trả về một mảng dữ liệu kiểu char.ReadElementString() cũng giống như ReadString(), ngoại trừ việc bạnkhông phải truyền tên của một thành tố. Nếu nội dung của mục tiếp theokhông phải là một start tag, hoặc nếu tham số Name không không phải làName của mục hiện hành, thì một ngoại lệ sẽ được phát ra.Đây là ví dụ chỉ ra cách sử dụng ReadElementString() (Bạn có thể tìm thấymã trong thư mục XmlReaderSample2). Chú ý rằng ví dụ này sử dụngFileStreams, vì vậy bạn cần phải bảo đảm rằng đã include không gian tênSystem.IO trong câu lệnh using.protected void button1_Click (object sender, System.EventArgs e) ...
Tìm kiếm theo từ khóa liên quan:
lập trình tài liệu lập trình kỹ thuật lập trình giáo trình C ngôn ngữ lập trình C tự học lập trình với CTài liệu có liên quan:
-
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 310 0 0 -
NGÂN HÀNG CÂU HỎI TRẮC NGHIỆM THIẾT KẾ WEB
8 trang 251 0 0 -
Giới thiệu môn học Ngôn ngữ lập trình C++
5 trang 223 0 0 -
101 trang 211 1 0
-
Bài giảng Nhập môn về lập trình - Chương 1: Giới thiệu về máy tính và lập trình
30 trang 189 0 0 -
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 160 0 0 -
Tìm hiểu về ngôn ngữ lập trình C: Phần 1 - Quách Tuấn Ngọc
211 trang 154 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 143 0 0 -
161 trang 140 1 0
-
Giáo trình Vi điều khiển PIC: Phần 1
119 trang 131 0 0