Chuyển từ XML sang lược đồ lớp

Một phần của tài liệu Bao cáo khóa luận TN ĐH (Trang 47 - 51)

PHẦN 2: HIỆN THỰC ỨNG DỤNG 4.1.Giới thiệu ứng dụng

4.4.1.Chuyển từ XML sang lược đồ lớp

Mã XML được nhập vào từ website, mã này sẽ được đọc và phân tích xem có đúng tài liệu XML qui định không. Sau khi đã xác nhận mã XML đúng định dạng ta thực hiện đưa dữ liệu vào bộ nhớ thông qua hai lớp:

ClassStruct: Mô tả cho cấu trúc của một đối tượng, trong một lược đồ sẽ có nhiều lớp do đó ta sẽ dùng một mảng ClassStruct này.

Relationship: Tương tự lớp này mô tả cho quan hệ giữa hai lớp trong sơ đồ và ta cũng dùng một mảng các lớp Relationship để mô tả cho các quan hệ trong sơ đồ lớp.

Sau khi đã có được danh sách các lớp cùng với các quan hệ trong bô nhớ ta thực hiện vẽ các lớp & các quan hệ này ra thành mô hình và hiện mô hình lên trang web.

Dưới đây là đoạn mã thể hiện quá trình trên, đoạn mã này nằm trong lớp GetXML (control GetXML.ascx) hàm cmdTaoMoi_Click.

XmlDocument doc = new XmlDocument();//tạo document try

{

}

catch (XmlException exx) {

lblMsg.Text = "Lỗi phân tích XML: " + exx.Message; return;

}

if (doc.DocumentElement.ChildNodes.Count > 0) {

initSession();

//duyệt qua các node trong tài liệu, mỗi node nếu có sẽ là một class hoặc một relationship

for (int i = 0; i < doc.DocumentElement.ChildNodes.Count; i++) {

XmlNode node = doc.DocumentElement.ChildNodes[i]; //nếu node đó là class

if (node.Name.ToLower() == Defines.strObject.ToLower()) //la đoi tuong

{

ClassStruct cls = new ClassStruct();//Tạo lớp cls.parseXml(node);//lấy thông tin lớp

list.Objects.Add(cls);//thêm lớp đó vào danh sách lớp }//Nếu node đó là relationship

else if (node.Name.ToLower() == Defines.strRelation.ToLower())//la quan he

Relationship rlt = new Relationship();//tạo quan hệ rlt.parseXml(node);//lấy thông tin quan hệ

list.Relations.Add(rlt);//thêm quan hệ vào danh sách }

}

//Đánh dấu đã chuyển xong

Session["ThongBao"] = "Đã chuyễn mã XML thành sơ đồ lớp"; Session["List"] = list;//Lưu danh sách lại

}

else lblMsg.Text = "Không có đối tượng nào trong mã XML vừa nhập";

Việc vẽ lược đồ chỉ là công đoạn thể hiện ra ngoài cho người dùng thấy, nó được thực hiện trong hàm DrawAll của lớp DrawDiagram (control DrawDiagram.ascx).

4.4.2. Chuyển từ lược đồ sang XML

Như trình bày phần trên biến list lưu lại lược đồ trong bô nhớ thông qua mô tả của hai lớp ClassStruct và Relationship, nên khi chuyển từ lược đồ này sang XML ta thực hiện như sau: (adsbygoogle = window.adsbygoogle || []).push({});

• Tạo thẻ <? … ?> • Tạo thẻ <Diagram>

• Duyệt qua tất cả các lớp trong danh sách lần lượt tạo mã XML cho từng lớp • Duyệt qua tất cả các quan hệ trong danh sách lần lượt tạo mã XML cho

từng quan hệ

• Tạo thẻ đóng </Diagram> • Xuất mã XML cho người dùng

Quá trình trên được thể hiện qua đoạn mã sau (trong hàm Page_Load của lớp GetXML):

string xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n"; xml += string.Format("<{0}>", Defines.strModel);//Tạo <Diagram> if (list.Objects.Count > 0)

{//duyệt các đối tượng

for (int i = 0; i < list.Objects.Count; i++) {

xml += "\r\n" + list.Objects[i].strXML;//tạo mã XML }

//duyệt các quan hệ

for (int i = 0; i < list.Relations.Count; i++) { xml += "\r\n" + list.Relations[i].strXML; } } //tạo </Diagram> xml += string.Format("\r\n</{0}>", Defines.strModel); XmlDocument doc = new XmlDocument();

doc.Save(path);//lưu file XML

txtXML.Text = xml; //hiện mã XML cho người dùng xem

Một phần của tài liệu Bao cáo khóa luận TN ĐH (Trang 47 - 51)