XML và Database

1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3- Xử lý dữ liệu XML với ASP 4- LINQ to XML

1

XML và Cơ Sở Dữ Liệu

• Mở đầu • Sự giống nhau và khác nhau giữa cơ sở dữ liệu và XML • Loại cơ sở dữ liệu XML • Trữ dữ liệu XML trong RDBMS • Minh họa

2

04.03.2013

Tầm quan trọng của XML

• Extensible Markup Language (XML) là chuẩn chính để

biểu diễn thông tin trên Internet đang có sự phát triển rất nhanh

• Hầu hết các tổ chức đều dùng XML làm chuẩn chia sẻ

thông tin.

• Tất cả các framework phát triển ƯD hiện nay đều hỗ trợ

XML(.NET, Java).

• Tất cả các kiến trúc hệ thống WEB hiện đại được thiết kế

dựa trên XML.

Ứng dụng của XML

• Lưu trữ dữ liệu

• Trao đổi dữ liệu

• Hiển thị dữ liệu

• Tất cả đều liên quan đến dữ liệu

Ứng dụng của XML

• Data Storage

• Lưu trữ thuần túy dùng file XML • Lưu trữ XML trong CSDL quan hệ • Lưu trữ trong XML-enabled databases

Ứng dụng của XML

• Data Interchange

• Không cần sử dụng các middleware nếu ứng dụng có thể đọc ghi

trực tiếp XML.

• Trên 80% dữ liệu trao đổi trên mạng hiện nay dưới dạng XML (per

Gartner Group)

Ứng dụng của XML

• Hiển thị dữ liệu

• Cùng một nguồn thông tin được hiển thị trên nhiều loại thiết bị

khác nhau.

• Trước khi có XML . . . • Phần lớn dùng HTML • Hoặc hoặc 1 tập các trang để phục vụ cho các thiết bị khác nhau.

Ứng dụng của XML

• Sau khi có XML

• Lưu trữ dữ liệu dưới dạng XML documents • Và 1 XSL document cho 1 loại thiết bị.

• Nếu xuất hiện loại thiết bị mới chỉ cần • Phát triển protocol mới (e.g., WAP) • Phát triển 1 XSL document mới

Ứng dụng của XML

• Sau đó có thể

• Chuyển cả XML và XSL xuống client.

• Hoặc

• Chuyển đổi XML và XSL tại server • Chuyển nội dung markup phù hợp xuống client.

Quản lý dữ liệu với quản lý tư liệu

• Quản lý dữ liệu:

• Cần cơ sở dữ liệu cho trữ dữ liệu • Relational hay Object database

• Quản lý tư liệu

• Cần hệ thống quản lý nội dung • Hệ thống quản lý nội dung có thể được xây dựng trên cơ sở dữ

liệu

10

04.03.2013

Lưu trữ và Truy vấn dữ liệu với XML

• Dữ liệu XML có thể được lưu trữ bằng các cách sau:

• Dưới dạng hệ thống tập tin • Cơ sở dữ liệu quan hệ • Cơ sở dữ liệu XML

Lưu trữ dữ liệu XML dưới dạng tập tin

• Lưu trữ sử dụng trực tiếp tập tin XML khi:

• Dữ liệu được truy cập bởi nhiều hệ thống khác nhau • Dữ liệu có thứ bậc • Tập dữ liệu nhỏ • Tốc độ truy cập không quan trọng • Chỉ thực hiện các truy vấn đơn giản • Các kiểu dữ liệu không quan trọng

Tại sao sử dụng XML cho Databases

Một trong những nguyên nhân chính để sử dụng XML là nó hỗ trợ việc trao đổi dữ liệu bán cấu trúc giữa các ứng dụng qua môi trường Internet. Việc sử dụng CSDL để lưu trữ văn bản XML sẽ giúp cho người dùng truy cập thông tin tốt hơn. XML rất mềm dẻo Dữ liệu lưu trữ dưới dạng XML có thể dễ dàng thay đổi cùng với sự tiến hóa của các dịch vụ của hệ thống.

XML Databases là gì?

Đơn giản là CSDL hỗ trợ lưu trữ văn bản XML

Có 2 loại chính: • XML- enabled: Ánh xạ văn bản XML thành dữ liệu lưu

• Native XML (NXD): Mô hình lưu trữ bên trong CSDL được xây dựng dựa trên XML và sử dụng văn bản XML như là đơn vị lưu trữ cơ bản.

trữ trong CSDL.

XML không phù hợp khi

• Luồng dữ liệu xử lý dưới dạng quan hệ • Tốc độ xử lý là rất quan trọng • Thành phần dữ liệu lưu trữ nằm ngoài các kiểu dữ liệu

mà XML có thể thể hiện

• Đặc biệt là các dữ liệu có bản chất dạng bảng. • Schema dễ bị thay đổi • Dữ liệu có quan hệ thứ bậc • Phần ít dữ liệu có cấu trúc rõ ràng và cố định

Sự giống nhau với cơ sở dữ liệu

• LưuTrữ: Table với tài liệu XML • Lược đồ: Lược đồ cơ sở dữ liệu với DTD, ngôn ngữ

lược đồ XML

• Ngôn ngữ Query: SQL với XQL, XML-QL, QUILT • Giao diện lập trình: JDBC với SAX, DOM

16

04.03.2013

Khác nhau với cơ sở dữ liệu

• Storge mechanism • Indexing • Built-in security • Transaction support • Data integrity • Multi-user access • Query across multiple data sources

17

04.03.2013

Lưu trữ XML trong CSDL quan hệ

• XML/relational mapping là quá trình chuyển đổi giữa mô

hình quan hệ và XML

• Văn bản XML có thể chuyển thành mô hình quan hệ và

ngược lại.

• Có nhiều cách thức khác nhau để thực hiện việc chuyển

đổi này.

Relational Model

Order of rows is not guaranteed unless the ORDER clause is used in one or more columns Relations (tables) Data is represented in n-ary

relations.

Has a domain that represents a set

of values

Attributes (columns) Strict schema Restrictive The strict schema insures data

integrity

XML Model

The XML Model is hierarchical format Data is represented in trees structures There's nodes Relationships between the node

The schema provides flexibility Easily modified format

XML Model

multiple elements represented in a hierarchy, including a root“Comments” element and one or more individual “Comment” elements pertaining to a given item.

XML Model VS. Relational Model?

XML data is hierarchical

relational data is represented in a model of logical relationships.

XML data is self-describing

XML data has inherent ordering

relational data is not self- describing.

 An XML database contains

collections

Relational data does not have inherent ordering.

A relational database contains tables

XML vs. Relational Database

CUSTOMER

Name

Age

ABC

30

XYZ

40

ABC 30

XYZ 40

XML vs. Relational Database

XML vs. Relational Database

XML-to-Relational mapping

• Schema mapping Database schema được tạo ra từ XML schema hoặc DTD để

lưu trữ văn bản XML.

• Data mapping Chia nhỏ văn bản XML thành các relational tuples và chèn vào

CSDL quan hệ.

Inlined DTD graph

Generated Database Schema

Data Mapping

• XML file is used to insert data into

generated database schema

• Parser is used to fetch data from XML file.

Example of an XML document

XML document decomposed into a relation

94872 PEN 19.95 30

Order

94866 BINDER

7.95 26

Items

92219 LABELS

12.95 250

> >

Another Example.....

Sales Order

Items table

XY-

14 16.80

B-

6 2.34

2003-07-28 456 47 987

Example

Robert Roberts 25

John Doe 32

XML và Database

1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3- Xử lý dữ liệu XML với ASP 4- LINQ to XML

33

Đối tượng XmlDocument

1) Chức năng

• Đối

tượng XmlDocument nằm

trong name

space System.Xml. Cần import / using System.Xml (VB.NET hay C#)

• Là đối tượng chính của .NET thích hợp cho việc truy xuất dữ liệu của một tệp XML đã tồn tại và cập nhật dữ liệu XML. • Cho phép thực hiện các thao tác trên tập XML như trên một

34

table: • Đọc dữ liệu • Thêm một Node • Xóa một Node • Cập nhật thuộc tính và giá trị một Node

Đối tượng XmlDocument

1) Chức năng

Trong System.Xml chứa các lớp chính để thao tác với tài liệu XML như: XmlDocument , XmlReader, XmlTextReader, XmlValidatingReader, XmlNodeReader, XmlWriter, và XmlTextWriter

35

Đối tượng XmlDocument

2- Khai báo đối tượng XmlDocument

Dim Num as Integer Dim Arr(5) as String

36

* Khác với khai báo một biến kiểu dữ liệu đơn giản: Dim tênbiến As KiểuDữLiệu Ví dụ : Dim Str As String VB.Net * Dim xmlDoc As new XmlDocument (Khai báo sử dụng tư liệu XML) ASP.Net XmlDocument doc = new XmlDocument();

Đối tượng XmlDocument 3- Đọc, Ghi một tư liệu XML

Cú pháp : xmlDoc.Load(PathName_of_XML_file)

xmlDoc.Load(“../../DATA/book.xml”)

a) Phương thức Load : đọc tệp XML Thông thường ta tạo thư mục DATA để lưu trữ các tệp XML Cú pháp trên được sử dụng: b) Phương thức Save : Lưu tệp tin XML Cú pháp: xmlDoc.Save(PathName_of_XML_file)

37

Đối tượng XmlDocument 3- Đọc, Ghi một tư liệu XML

• Việc đọc một tài liệu XML tùy thuộc vào cấu trúc của tài liệu đó, và thường có tính đệ quy vì khi đã tải tài liệu XML vào đối tượng XMDocument thì việc duyệt trên đối tượng này giống như duyệt trên một cấu trúc cây.

• Mỗi node của tài liệu có thuộc tính NodeType cho biết đó là node loại nào. Các giá trị của thuộc tính này là: Element, Text, ...

38

Đối tượng XmlDocument 3- Đọc, Ghi một tư liệu XML

Console.WriteLine("{0}", node.InnerText);

Process(child, level + 1);

if(node.NodeType == XmlNodeType.Text) foreach (XmlNode child in node.ChildNodes) { }

39

• Ví dụ: duyệt qua tất cả các node Text trong tài liệu static public void Process(XmlNode node, int level) { }

40

Đối tượng XmlDocument 4- Các thao tác với xmlDocument Tran Van Mot 1111111111 mot@gmail.com Nguyen Thi Hai 2222222222 hai@yahoo.com Bui Dinh Ba 3333333333 ba@gmail.com

Đối tượng XmlDocument 4- Các thao tác với xmlDocument Lớp Person sau đây đã được xây dựng: class Person {

this.Name = name; this.Phone = phone; this.Email = mail;

41

return this.Name + ", " + this.Phone + ", " + this.Email;

public string Name { set; get; } public string Phone { set; get; } public string Email { set; get; } public Person(string name, string phone, string mail) { } public override string ToString() { }

}

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

• Phương thức Duyệt tài liệu XML:

42

static public void TraverseFile() {XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode nod = doc.SelectSingleNode("contacts/person");//tìm node đầu tiên thỏa XPath str += ""; while (nod != null) { str += "
"; str += ""; str += ""; str += ""; str += ""; str += ""; nod = nod.NextSibling;//chuyển sang node kế tiếp } str += "
TênPhoneEmail
"; str += nod["name"].InnerText; str += ""; str += nod["phone"].InnerText; str += ""; str += nod["email"].InnerText; str += "
"; Label1.Text = str;} }

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

temp.Add new Person node["name"].InnerText, node["phone"].InnerText, node["email"].InnerText

43

List temp = new List(); XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); XmlNodeList nodeList = doc.SelectNodes("contacts/person"); foreach (XmlNode node in nodeList) { { }}; return temp;

• Đọc tài liệu XML: static public List ReadElements() { }

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

• Tìm kiếm trên tài liệu: static public void Search(XmlNode root, string find, ref XmlNode result) { if (root.NodeType == XmlNodeType.Text) if (root.InnerText == find)result = root; foreach (XmlNode n in root.ChildNodes) Search(n, name,ref result); } • Trong đó find là chuỗi cần tìm, nếu tìm được hàm này trả về XmlNode chứa chuỗi find, ngược lại hàm trả về giá trị null.

44

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

45

• Tìm kiếm trên tài liệu: • Đoạn mã dưới đây minh họa cách sử dụng hàm này. XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); XmlNode root = doc.SelectSingleNode("contacts"); XmlNode result = null; Search(root, "Nguyen Thi Hai",ref result); if (result == null) Label1.Text = "không thấy"; else Label1.Text =result.InnerText;

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

1. Tham chiếu đến tài liệu xDoc 2. Tạo phần tử con subNode, và bổ sung các thuộc tính nếu có 3. Tạo các TextNode cho subNode 4. Bổ sung các TextNode vào subNode 5. Bổ sung subNode vào tài liệu xDoc 6. Lưu tài liệu

• Thêm phần tử vào tài liệu: thực hiện các bước sau:

46

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

47

XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(inputFilePath); //tạo một phần tử "person" mới: XmlElement elPerson = xmlDoc.CreateElement("person"); //bổ sung thuộc tính "category": elPerson.SetAttribute("category", cat); //tạo các phần tử "name", "phone" và "email": XmlElement elName = xmlDoc.CreateElement("name"); XmlElement elPhone = xmlDoc.CreateElement("phone"); XmlElement elEmail = xmlDoc.CreateElement("email");

• Thêm phần tử vào tài liệu: thực hiện các bước sau: static public void InsertElement(string cat, string name, string phone, string email) {

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

//tạo các text node: XmlText txtName = xmlDoc.CreateTextNode(name); XmlText txtPhone = xmlDoc.CreateTextNode(phone); txtEmail = xmlDoc.CreateTextNode(email); //thêm các textnode vào "name", "phone", "email": elName.AppendChild(txtName); elPhone.AppendChild(txtPhone); elEmail.AppendChild(txtEmail);

• Thêm phần tử vào tài liệu: thực hiện các bước sau: static public void InsertElement(string cat, string name, string phone, string email) {

48

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

49

//thêm phần tử vừa tạo vào node "person" mới: elPerson.AppendChild(elName); elPerson.AppendChild(elPhone); elPerson.AppendChild(elEmail); //lấy node gốc: XmlElement elRoot = xmlDoc.DocumentElement; //thêm "person" vào gốc: elRoot.AppendChild(elPerson); //lưu document: xmlDoc.Save(outputFilePath);

• Thêm phần tử vào tài liệu: thực hiện các bước sau: static public void InsertElement(string cat, string name, string phone, string email) { }

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

• Cập nhật một phần tử trong tài liệu: • Việc cập nhật và xóa các phần tử trong tài liệu sẽ dựa

trên thao tác tìm kiếm. Nếu tìm được: • Cập nhật giá trị mới • Lưu tài liệu.

50

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); //tìm node cần cập nhật: XmlNode root = doc.DocumentElement;//lấy node gốc XmlNode result = null; Search(root, oldValue,ref result);

• Cập nhật một phần tử trong tài liệu: static public bool UpdateElement(string oldValue, string newValue) {

try {

51

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

result.InnerText = newValue; doc.Save(inputFilePath); return true;

if (result != null) { } else return false;

return false;

• Cập nhật một phần tử trong tài liệu: static public bool UpdateElement(string oldValue, string newValue) {

52

} catch { }

}

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

• Tìm kiếm phần tử cần xóa (giả sử phần tử tìm

• Xóa phần tử:

được là result).

• Xác định phần tử cha của x, bằng thuộc tính

• Gọi phương thức RemoveChild từ phần tử cha

result.ParentNode

này, với tham số là result

53

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

54

• Xóa phần tử: static public bool Delete(string find) { XmlDocument doc = new XmlDocument(); doc.Load(inputFilePath); //tìm node cần cập nhật: XmlNode root = doc.DocumentElement; //lấy node gốc XmlNode result = null; Search(root, find, ref result); try {

Đối tượng XmlDocument 4- Các thao tác với xmlDocument

if (result != null) { result.ParentNode.RemoveChild(result); //xóa result doc.Save(inputFilePath); return true; } else return false; } catch { return false;

55

• Xóa phần tử: static public bool Delete(string find) { } }

Đối tượng XmlTextWriter, XmlTextReader

Dùng để - ghi dữ liệu ra tệp XML theo định dạng - đọc dữ liệu từ tệp XML

56

Đối tượng XmlTextWriter

1- Khai báo Imports System.Xml Dim xtw as New XmlTextWriter(fileXml,Encoding.UTF8) Khai báo các thuộc tính của đối tượng XmlTextWriter Xtw.Formatting=Formatting.Indented Xtw.Identation=3

57

Các phương thức Ghi dữ liệu ra tệp XML - xtw.WriteStartDocument() - xtw.WriteComment(strComment) - xtw.WriteStartElement(RootNodeName) - xtw.WriteStartElement(NodeName) - xtw. WriteEndElement() ‘ an Child Element - xtw.WriteStartElement() ‘ Root Element - xtw.WriteEndDocument() - xtw.Flush() - xtw.Close()

58

Đối tượng XmlWriter, XmlReader

Dùng để - ghi dữ liệu ra tệp XML - đọc dữ liệu từ tệp XML, thường dùng kèm với đối tượng DataSet

59

Khai báo và tạo đối tượng XmlReader

Dim ds As New DataSet Dim xmlDoc As XmlReader xmlDoc = XmlReader.Create("Product.xml") ds.ReadXml(xmlDoc) ‘ đưa dữ liệu XML và DataSet DataGridView1.DataSource = ds.Tables(0) ‘ Gắn dữ liệu trong DataSet vào đối tượng lưới

DataGridView

60

DCT.XML 7 9 - Viết thủ tục (Sub) in ra màn hình kết quả học tập của sinh viên có mã số

“0812”

- Viết hàm (Function) trả về Điểm trung bình tích lũy của sinh viên có mã

số “0812”

61

- Sử dụng Sub, Function trong thủ tục Main() của Module1

ORDER.XML

7 3

62

10-10”> - Viết thủ tục (Sub) in ra màn hình Chi tiết hóa đơn có mã số “0812” - Viết hàm (Function) trả về tổng giá trị (Amount) có mã số “0812” - Sử dụng Sub, Function trong thủ tục Main() của Module1

XML và Database

1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3. Xử lý dữ liệu XML với ASP 4- LINQ to XML

63

Data Provider Class

Data Provider Công dụng

Connection Class, Command

OleDB

Kết nối mọi ứng dụng chạy .NET

OleDbConnection OleDbCommand

Sql

Chỉ dành cho SQL Server SqlConnection SqlCommand

ODBC

Khi có một ODBC dữ liệu nguồn OdbcConnection OdbcCommand

Khai báo NameSpace

Using System.Xml Using System.Console Using System.Data Using System.Data.OleDb //CSDL Khác Using System.Data.SQLClient//SQL server

Ví dụ minh họa sử dụng DataSet

SV(HoTen Char(30), Lop Char(12))

Mục tiêu: đưa dữ liệu từ table SV.sv vào tệp SV.xml

1- Khai báo và tạo đối tượng Connection 2- Khai báo tạo đối tượng Adapter 3- Khai báo tạo đối tượng DataSet, nạp dữ liệu vào DataSet 4- Đưa dữ liệu trong DataSet vào đối tượng XML 5- Lưu dữ liệu XML

1- Khai báo đối tượng Connection Đối tượng Connection

OleDbConnection con;// Khai báo và kết nối với Access String strcon; strCon ="Provider=Microsoft.Jet.OleDb.4.0;Data Source ="; strCon = strCon + Server.MapPath(".") + "\\sv.mdb"; con = new OleDbConnection(strCon); con.Open();

SqlConnection con;// Khai báo và kết nối với SQL String strcon; strCon= “Server=ServerName;Database=DBName;uid=userName;pwd=password”; con = new SqlConnection(strCon); con.Open();

2-Khai báo, tạo và nạp đối tượng Adapter

 Tạo DataAdapter

SqlDataAdapter da; da= new SqlDataAdapter(sql, conn);

 Hoặc

SqlDataAdapter da = new

SqlDataAdapter(); da.SelectCommand.Connection = conn; da.SelectCommand.CommandText = sql;

 Sau đó

Da.Fill(ds);

2-Khai báo, tạo và nạp đối tượng Adapter

 Tạo DataAdapter

SqlDataAdapter da; da= new SqlDataAdapter(sql, conn);

 Hoặc

SqlDataAdapter da = new

SqlDataAdapter(); da.SelectCommand.Connection = conn; da.SelectCommand.CommandText = sql;

 Sau đó

Da.Fill(ds);

DataSet

• DataSet là một mô hình CSDL quan hệ thu nhỏ đáp ứng

nhu cầu của ứng dụng.

(DataRelation) và các ràng buộc (constraint) • Dataset thuộc tên miền: System.Data.Dataset. • Khai báo

• Dataset chứa các bảng (DataTable), các quanhệ

• New System.Data.Dataset() Hoặc • New System.Data.Dataset()

04/03/13

70

Dataset

DataSet

DataTable

DataTable

DataTable

SqlDataAdapter

Bộ nhớ

Thiết bị lưu trữ

SqlConnection

OleDbDataAdapter

OleDbConnection

SQL Server 2000

OleDb Database

Tạo DataSet

• Tạo Dataset…

DataSet ds = New DataSet();

• Sau đó… Da.Fill(ds);

Ví dụ demo XMLDocument

4- Đưa dữ liệu trong DataSet vào đối tượngXML (trong bộ nhớ)

xmlDoc.LoadXml(objDataSet.GetXml()) xmlDoc.Save(xmlFile) ‘ đối tượng xmlDoc đã được khai báo : Dim xmlDoc As New XmlDocument xmlDoc.Load(PathXML)

XML và Database

1- XML và Cơ Sở Dữ Liệu 2- Xdocument 3. Xử lý dữ liệu XML với ASP 4- LINQ to XML

74

Sử dụng LINQ to XML

• LINQ to XML sử dụng các lớp XDocument, XElement,

• Để thao tác với các tài liệu XML tại thời điểm run-time, .NET cài đặt sẵn các lớp và tiện ích để làm việc với tài liệu XML như XDocument và LINQ to XML.

5 7

và XAttribute để thao tác với tài liệu XML.

using System.Xml.Linq;

Các bước: 1. Khai báo thư viện khi sử dụng LINQ to XML: 2. Xây dựng một lớp riêng trong file “LINQ2XML.cs” để

thực hiện các thao tác trên tài liệu XML.

Sử dụng LINQ to XML

6 7

4 Nguen dinh bon 123456 bon@gmail.com 5 Triệu Tử Long 888888888 tulong@yahoo.com 6 Lôi Quốc Cường 656565646 quoccuong@gmail.com

1 Tran Van Mot 11111111111 mot@gmail.com 2 Nguyen Thi Hai 2222222222 hai@yahoo.com 3 Bui Dinh Ba 3333333333 ba@gmail.com

Sử dụng LINQ to XML

Tham chiếu đến file tài liệu: • Đối tượng XElement sử dụng phương thức Load để tham

chiếu đến file tài liệu.

7 7

• Giả sử đường dẫn vật lý của file tài liệu như sau: • Khi đó, để load tài liệu lên đối tượng xml của lớp

string path = HttpContext.Current.Server.MapPath(@"~/App_Data/ XMLFile.xml");

Xelement ta sử dụng phương thức:

xml = XElement.Load(path); • Kể từ lúc này các thao tác sẽ được thực hiện trên đối

tượng xml.

Sử dụng LINQ to XML

Lưu tài liệu: • Khi muốn lưu nội dung của đối tượng xml vào file tài liệu,

xml.Save(path);

ta gọi phương thức

8 7

Sử dụng LINQ to XML

Tham chiếu đến các phần tử trong tài liệu: • LINQ to XML cung cấp 2 phương thức Elements và

9 7

Element (không có s) để tham chiếu đến các phần tử trong tài liệu, tuy nhiên việc sử dụng các phương thức còn phụ thuộc vào cấu trúc của chính tài liệu xml.

• Ví dụ:

var contacts = xml.Elements("person"); var t = contacts.First(); var name = t.Element("name").Value.ToString(); var phone = t.Element("phone").Value.ToString(); var email = t.Element("email").Value.ToString(); • Khi đó biến name sẽ chữa chuỗi Tran Van Mot, biến phone sẽ chữa chuỗi 11111111111 và biến email sẽ chữa chuỗi mot@gmail.com

Sử dụng LINQ to XML

Tham chiếu đến thuộc tính: • LINQ to XML cũng cung cấp các phương thức để truy

xuất đến thuộc tính của các phần tử.

• Ví dụ nếu:

0 8

var contacts = xml.Elements("person"); var t = contacts.First(); var attribute =

t.Attribute("category").Value.ToString();

thì biến attribute sẽ nhận giá trị personal

Sử dụng LINQ to XML

Thêm phần tử vào tài liệu: • Trước tiên ta phải xác định được nút cha của nó, sau đó sử dụng phương thức Add đối với phần tử cha này với tham số là phần tử con cần thêm.

1 8

• Ví dụ:

//tạo phần tử mới XElement per = new XElement ( "person", new XAttribute("category",cat), //thêm thuộc tính new XElement("id", p.Id), //thêm các phần tử con new XElement("name", p.Name), new XElement("phone", p.Phone), new XElement("email", p.Email) ); //thêm vào tài liệu xml.Add(per);

Sử dụng LINQ to XML

Tìm kiếm phần tử: • Ví dụ: tìm tất cả các phần tử có category thỏa mãn tham số

2 8

ToString()+"
");

đầu vào và hiển thì phần tử name trên trình duyệt: public void DisplayElements(string category) { var contacts = xml.Elements("person"); var result = from c in contacts where c.Attribute("category").Value.ToString() == category select c; foreach (var re in result) { HttpContext.Current.Response.Write(re.Element("name").Value.

} }

3 8

person.Element("id").Value.ToString(), person.Element("name").Value.ToString(), person.Element("phone").Value.ToString(), person.Element("email").Value.ToString() ); }

Sử dụng LINQ to XML Tìm kiếm phần tử: Trường hợp tìm kiếm chính xác một phần tử trong tài liệu: /// /// Tìm kiếm phần tử khi biết Id /// /// Id /// null = không tìm được, đối tượng Person = tìm được public Person Search(string id) { try { var contacts = xml.Elements("person"); var person = ( from p in contacts where p.Element("id").Value.ToString() == id select p ).Single(); return new Person ( catch { return null; } }

Sử dụng LINQ to XML Cập nhật phần tử: • Việc cập nhật các giá trị của các phần tử thường dựa

trên thao tác tìm kiếm:

4 8

Ví dụ: ///

/// Sửa phần tử trong tài liệu (bao gồm cả thuộc tính category) /// /// đối tượng mới /// thuộc tính /// true = thành công, false = thất bại

5 8

where per.Element("id").Value.ToString() == p.Id select per

Sử dụng LINQ to XML public bool Update(Person p, string category) { try { Person find = this.Search(p.Id); //tìm phần tử cần sửa if (find == null) return false; var contacts = xml.Elements("person"); var person = ( from per in contacts ).Single(); //update:

person.Attribute("category").Value = category; person.Element("name").Value = p.Name; person.Element("phone").Value = p.Phone; person.Element("email").Value = p.Email;

this.Save(); return true; }

catch { return false; }}

6 8

Sử dụng LINQ to XML Xóa phần tử: Tương tự việc cập nhật, để xóa phần tử chúng ta cũng sẽ sử dụng các thao tác duyệt qua các phần tử để tìm kiếm phần tử cần xóa. /// /// Xóa phần tử trong tài liệu /// /// Id của phần tử cần xóa /// true = thành công, false = thất bại

7 8

where per.Element("id").Value.ToString() == id select per

var contacts = xml.Elements("person"); var person = ( from per in contacts ).Single();

person.Remove(); this.Save(); return true;

return false;

Sử dụng LINQ to XML public bool Delete(string id) { try {Person find = this.Search(id); if (find == null) return false; //xóa: } catch { } }

Thank you!

http://ndtfit.brinkster.net

88