Một trong số đó là Ecmascript cho XML, còn gọi vắn tắt là E4X. Trong bài hướng dẫn này, dần dần bạn sẽ tìm hiểu sâu về các thủ thuật XML khi phân tích các phần của dữ liệu XML sau:
Bài hướng dẫn này tập trung khá nhiều kiến thức, vì vậy tôi cung cấp cho bạn một cái mục lục để bạn biết bắt đầu từ đâu :
- Cấu trúc XML
- Load một file XML
- Đọc dữ liệu XML
- XML và XMLList
- Truy cập dữ liệu trực tiếp
- Truy cập dữ liệu gián tiếp
- Gọi tất cả các Children()
- Đọc các thuộc tính - Attributes
- Lọc giá trị
- Lọc các giá trị Node
- Lọc thông tin của thuộc tính - Attribute
Như bạn thấy, có nhiều chủ đề mà bạn sẽ học về cách sử dụng XML trong Flash. Trước hết chúng ta đi từ mục đầu tiên, bắt đầu bằng việc tìm hiểu coi file XML là gì ?
Cấu trúc XMLMột file XML về bản chất giống như một cái cây với nhiều
cành và
lá khác nhau mà ta thường gọi là các
node - nút và
value -
giá trị. Dữ liệu XML bên trên của chúng ta cũng không phải là ngoại lệ. Biểu đồ sau mô tả một cách trực quan hơn về cấu trúc dữ liệu XML trong ví dụ của chúng ta:
Thử nghĩ mỗi ô trong hình trên là một
node. Như vậy
node gốc chính của chúng ta là
Books, và cái node gốc đó có 4
child nodes (các node con) là
Book. Book node chứa thông tin về
ISBN, và thông tin được lưu trữ trực tiếp trên node được gọi là một thuộc tính -
attribute. Bạn cũng có thể lưu trữ thông tin trong các node con -
child node, và thông tin về tựa sách (title) cùng tác giả (author) được lưu trữ trong các child node tương ứng là
title và
author.
Kiểu phân cấp này, giống như dữ liệu XML, về bản chất giống như một cái cây. Trong thế giới máy tính, các cấu trúc dạng cây rất thông dụng vì chúng giúp bạn phân loại thông tin rất rõ ràng, từ bao quát trên ngọn cấy đến từng chi tiết trên những chiếc lá. Khi nhìn cấu trúc dữ liệu trong ví dụ, bạn có thể dễ dàng nhận thấy mối quan hệ giữa node cha - parent node (Books) và các node con - child nodes (Book, Title, Author) của nó.
Khi kết thúc bài hướng dẫn, bạn sẽ học được một số cách truy cập thông tin của tất cả các node cũng như attribute. Để truy cập dữ liệu, trước tiên bạn cần phải biết cách load dữ liệu XML đã.
Load một file XMLKhi load một file XML, có một số bước mà bạn cần phải tuân theo. Trước hết bạn cần load file XML. Tìm hiểu sâu hơn, bạn cần phải biết khi nào thì file XML đã hoàn toàn load xong, bởi lẽ bạn không thể thao tác với dữ liệu đang load nửa chừng. Nghe có vẻ phức tạp, nhưng các class built-in trong Flash sẽ giúp bạn thực hiện rất dễ dàng.
Hãy xem đoạn code để load file XML dưới đây:
Code:
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest
("http://www.kirupa.com/net/files/sampleXML.xml"));
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
trace(xmlData);
}
Khi paste đoạn code trên vào trong cửa sổ Actions và nhấn Ctrl + Enter, bạn sẽ thấy nội dung file XML của chúng ta hiển thị trong cửa sổ Output:
[ file XML của bạn được hiển thị trong cửa sổ Output ]
Đoạn code đã chạy, bây giờ chúng ta cùng xem kỹ từng phần và tìm hiểu cách chúng load một file XML vào trong bộ nhớ như thế nào:
Code:
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
Ở trên, bạn định nghĩa 2 biến
xmlLoader và
xmlData. Kiểu của biến xmlLoader là URLLoader, và class
URLLoader giúp bạn load dữ liệu từ bên ngoài như một URL.
Biến xmlData thuộc kiểu XML, và lớp XML cung cấp cho bạn rất nhiều tính năng để truy cập và xử lý dữ liệu XML. Chúng ta sẽ sử dụng các đối tượng XML (XML objects) trong suốt bài hướng dẫn này, vì vậy tôi sẽ giải thích thêm về các XML object trong những phần tiếp theo.
Code:
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
Ở dòng này, chúng ta đăng ký một
event listener với đối tượng
xmlLoader. Một
event listener về căn bản, giống như tên gọi của nó (lắng nghe sự kiện), sẽ "nghe" một sự kiện xác định, và khi sự kiện (event) xảy ra, gọi một hàm gọi là listener function - hàm sự kiện.
Trong đoạn code trên, chúng ta "nghe" sự kiện hoàn thành - đã load xong (Event.COMPLETE), và khi sự kiện này xảy ra - tức là dữ liệu XML đã được load hoàn toàn vào trong Flash, chúng ta sẽ gọi hàm
LoadXML <-- listener function. Do phải chờ sự kiện COMPLETE, chúng ta có thể đảm bảo việc không "táy máy" gì được vào dữ liệu cho đến khi toàn bộ được load xong.
Code:
xmlLoader.load(new URLRequest
("http://www.kirupa.com/net/files/sampleXML.xml"));
Vừa rồi chúng ta vẫn chưa đả động gì đến đối tượng xmlLoader. Ở dòng trên, ta gọi method
load của đối tượng
xmlLoader.
Method
load nhận một đối tượng
URLRequest làm đối số. Lý do là khi bạn download dữ liệu từ internet, dữ liệu được tải xuống từng phần theo dạng stream. Class URLRequest đảm bảo toàn bộ dữ liệu được load xuống hết, và do đó chắc chắn method load của chúng ta có thể lấy được tất cả dữ liệu XML trong 1 lần.
Giờ hãy xem method
LoadXML mà tôi vừa đề cập ở trên lúc nói về method addEventListener:
Code:
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
trace(xmlData);
}Hàm listener LoadXML của bạn sẽ được gọi khi event listener của xmlLoader phát hiện sự kiện COMPLETE đã diễn ra. Sự kiện COMPLETE chỉ xảy ra khi tất cả dữ liệu bên ngoài đã được load vào hoàn toàn thông qua method load.
Bởi vì hàm LoadXML của chúng ta là một listener, cấu trúc của nó hơi khác một chút so với một hàm thông thường. Hàm LoadXML nhận một đối số kiểu Event là
e, và đối số
e này bao gồm nhiều dữ liệu liên quan đến sự kiện sẽ xảy ra.
Bạn có thể truy cập vào dữ liệu đã gửi đến event listener của mình bằng cách gọi
e.target.data. Since our event listener is fired by our URLLoader object, the data sent to it is the XML data you loaded via the URLRequest earlier.
Cuối cùng, tất cả dữ liệu của bạn đã được lưu vào XML Object tên gọi xmlData. Ngay sau khi method LoadXML được thực thi, tất cả dữ liệu XML sẽ được lưu trữ trong bộ nhớ.
http://tamnguyen.vn - Chúc các bạn thành công !