Danh mục

Thao tác trên XML part 5

Số trang: 12      Loại file: pdf      Dung lượng: 163.16 KB      Lượt xem: 8      Lượt tải: 0    
Thư viện của tui

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Đọc và ghi Streamed XML 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.
Nội dung trích xuất từ tài liệu:
Thao tác trên XML part 5Đọc và ghi Streamed XMLGiờ đâ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 choquay 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ênkhô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 ra một tài liệu XML phù hợp với các chuẩn của không gian tên W3CsXML 1.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ồng hoặc các đốitượng TextReader/TextWriter trong không gian tên System.IO. XmlNodeReader sử dụngmộ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ệu hợp lệ. Chúng ta sẽ xem xét nó kĩ hơn trong phần saucủ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ác biệt lớn nhấtlà: SAX là một mô hình kiểu push (có nghĩa là, nó đẩy dữ liệu ra khỏi ứng dụng, và pháttriển sẵn sàng nhận nó), còn XmlTextReader là một mô hình pull, ở đó dữ liệu được kéovào ứng dụng yêu cầu nó. Nó tạo ra một mô hình lập trình dễ dàng và trực quan hơn. Mộtlợ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ạnkhông muốn tấ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 hay khô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ét kĩ hơn lớpXmlTextReader. Bạn sẽ tìm thấy mã trong thư mục XmlReaderSample1. Thay vì dùngkhô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ượng string chứa tênđường dẫn của file XML. Sau đó chúng ta tạo một XmlTextReader mới với chuỗi truyềnfileName. XmlTextReader có mười ba quá tải. Chúng ta có thể kết hợp các chuỗi truyềnkhác nhau (filenames và URLs), streams và NameTables (khi một thành phần của thuộctính tên xảy ra 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ương Read()sẽ di chuyển sang mục đầu tiên trong tài liệu. Nó tiêu biểu cho các mục khai báo XML.Trong ví dụ này, chúng ta duyệt qua từng mục và so sánh tr.NodeType với bộXmlNodeType, và thêm các mục được tìm thấy vào listbox. Đây là màn hình sau khilistbox đượ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ểnsang mục tiếp theo. Chúng ta có thể xem nêu mục đó có một giá trị (HasValue()) hoặc,hoặc nếu mục đó có các thuộc tính (HasAttributes()). Chúng ta cũng có thể dùng phươngthức ReadStartElement(), để 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ột ngoại lệ XmlExceptionsẽ được phát ra. Việc gọi phương thức này giống như 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ệukiểu char.ReadElementString() cũng giống như ReadString(), ngoại trừ việc bạn không phải truyềntên của một thành tố. Nếu nội dung của mục tiếp theo không phải là một start tag, hoặcnế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ấy mã trong thưmục XmlReaderSample2). Chú ý rằng ví dụ này sử dụng FileStreams, vì vậy bạn cầnphải bảo đảm rằng đã include không gian tên System.IO trong câu lệnh using.protected void button1_Click (object sender, System.EventArgs e){ //use a filestream to get the data FileStream fs = new FileStream(..\..\..\books.xml,FileMode.Open); XmlTextReader tr = new XmlTextReader(fs); while(!tr.EOF) { //if we hit an element type, try and load it in the lis ...

Tài liệu được xem nhiều: