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
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
12.95
250
-
-
>
-
>
Another Example.....
Sales Order
Items table
XY-
14
16.80
B-
6
2.34
2003-07-28
456
-
47
987
Example
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 += "
| Tên | Phone | |
| "; str += nod["name"].InnerText; str += " | "; str += ""; str += nod["phone"].InnerText; str += " | "; str += ""; str += nod["email"].InnerText; str += " | "; 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
xml version=“1.0” encoding=“utf-8” ?>
“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
xml version=“1.0” encoding=“utf-8” ?>
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
- 7
- 3
62
xml version=“1.0” encoding=“utf-8” ?>
10-10”>
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
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ụ:
///
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;

