1. Trang chủ
  2. » Công Nghệ Thông Tin

Thao tác XML - Sử dụng XPath và XSLT trong .NET – Phần 1 potx

14 450 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 126,38 KB

Nội dung

Lí do xem xét cả hai lớp trên là vì lớp XPathNavigator của không gian tên System.XPath cung cấp cách rất thực tế để thực thi các biến đổi XSL trong .NET.. Các lớp trong không gian này đư

Trang 1

Thao tác XML

Sử dụng XPath và XSLT trong NET – Phần 1

Trong phần này, chúng ta sẽ xem xét hỗ trợ cho XPath và XSL Transforms

(XSLT) trong NET Framework XPath được hỗ trợ thông qua không gian

tên System.Xml.XPath, và XSLT được hỗ trợ thông qua không gian tên

System.Xml.Xsl Lí do xem xét cả hai lớp trên là vì lớp XPathNavigator của

không gian tên System.XPath cung cấp cách rất thực tế để thực thi các biến

đổi XSL trong NET

XPath là một ngôn ngữ truy vấn cho XML Bạn sẽ dùng XPath để chọn một

bộ con các các yếu tố giá trị văn bản hoặc các giá trị thuộc tính XSLT được

dụng để thay đổi một tài liệu gốc sang một tài liệu với một cấu trúc kiểu

khác

Trước tiên chúng ta sẽ xem xét System.XPath và trình bày cách dùng các lớp

System.Xml.Xsl

Không gian tên System.XPath

Trang 2

Không gian tên System.XPath được xây dựng dựa trên yếu tố tốc độ Nó

cung cấp một thể hiện chỉ đọc cho tài liệu XML của bạn, vì vậy không có

vấn đề soạn thảo ở đây Các lớp trong không gian này được xây dựng đẻ

thực thi lặp nhanh và lựa chon trên tài liệu XML trong một con trỏ

Đây là một bảng liệt kê các lớp trong System.XPath, và một giải thích ngắn

vì hỗ trợ của mỗi lớp:

Class Name Description

XPathDocument Một view của tài liệu XML Chỉ đọc

XPathNavigator Cung cấp khả năng điều hướng cho một

XPathDocument

XPathNodeIterator Cung cấp khả năng truy xuất trực tiếp các nút XPath

trang bị một bộ nút trong Xpath

XPathExpression Một biên dịch phương thức XPath Được dùng bởi

Trang 3

Class Name Description

SelectNodes, SelectSingleNodes, Evaluate, và Matches

XPathException XPath exception class

XPathDocument

XPathDocument tương thích cho bất kì thao tác nào của lớp XmlDocument

Nếu bạn cần khả năng soạn thảo, XmlDocument được lựa chọn khi bạn sử

dụng ADO.NET, XmlDataDocument (chúng ta sẽ xem xét ở phần sau của

chương) Dĩ nhiên, khi cần thao tác nhanh bạn có thể sử dụng

XPathDocument Nó có bốn quá tải cho phép bạn một một tài liệu XML từ

một file và một đường dẫn, một đối tượng TextReader, một đối tượng

XmlReader hoặc một đối tượng Stream-based

XPathNavigator

XPathNavigator chứa tât cả các phương thức di chuyển, lựa chọn mà bạn

cần Sau đây là một số phương thức được định nghĩa trong lớp:

Trang 4

Method Name Description

MoveTo() Cần một tham số XPathNavigator Di chuyển vị trí

hiện tại đến vị trí được truyền trong

XPathNavigator

MoveToAttribute() Di chuyển tới thuộc tính được chọn Cần một tên

thuộc tính và không gian làm tham số

MoveToFirstAttribute() Di chuyển đến thuộc tính đầu tiên của mục hiện tại

Trả về giá trị true nếu thành công

MoveToNextAttribute() Di chuyển đến thuộc tính tiếp theo của mục hiện

tại Trả về true nếu thành công

MoveToFirst() Di chuyển đến mẫu đầu tiên cùng loại với mẫu hiện

tại Trả về true nếu thành công, ngược lại trả về

false

Trang 5

Method Name Description

MoveToLast() Di chuyển đến mẫu cuối cùng cùng loại với mẫu

hiện tại Trả về true nếu thành công

MoveToNext() Di chuyển đến mẫu tiếp theo cùng loại với mẫu

hiện tại Trả về true nếu thành công

MoveToPrevious() Di chuyển đến mẫu trước cùng loại với mẫu hiện

tại Trả về true nếu thành công

MoveToFirstChild() Di chuyển đến mẫu con đầu tiên của mẫu hiện tại

Trả về true nếu thành công

MoveToId() Di chuyển đếu mẫu có ID được truyền qua tham số

Nó cần một sơ đồ tài liệu, và một kiểu dữ liệu cho

là kiểu của ID

Trang 6

Method Name Description

MoveToParent() Di chuyển đến cha của mẫu hiện tại Trả về true

nếu thành công

MoveToRoot() Di chuyển nếu nút gốc của tài liệu

Có một vài phương thức Select() khác nhau hỗ trợchọn một tập các nút để

làm việc Tất cả các phương thức Select() trả về một đối tượng

XPathNodeIterator

Ngoài ra có thể sử dụng các phương thức SelectAncestors() và

SelectChildren() Cả hai phương thức đều trả về một XPathNodeIterator

Trong khi Select() cần một tham số XPath, thì các phương thức này cần một

tham số XPathNodeType

Bạn có thể dùng XPathNavigator để lưu trữ như là một file hệ thống hoặc

Registry thay cho một XPathDocument

XPathNodeIterator

Trang 7

XPathNodeIterator có thể coi là một trang bị NodeList hoặc một NodeSet

trong XPath Đối tượng này có ba thuộc tính và hai phương thức:

 Clone – Tạo một copy mới của chính nó

 Count – Số các nút trong đối tượng XPathNodeIterator

 Current – Trả về một XPathNavigator trỏ đến nút hiện tại

 CurrentPosition() – Trả về một số integer chứa vị trí hiện tại

 MoveNext() – Di chuyển đến nút tiếp theo thường thấy trong biểu

thức XPath dùng để tạo một XpathNodeIterator

Sử dụng các lớp trong không gian tên XPath

Các tốt nhất để chỉ ra cách làm việc của các ví dụ này là thông qua ví dụ

Hãy load tài liệu books.xml xem qua chúng bạn sẽ thấy được định hướng

của công việc Trước tiên, chúng ta tạo một tham chiếu đến các không gian

tên System.Xml.Xsl và System.Xml.XPath:

using System.Xml.XPath;

using System.Xml.Xsl;

Trang 8

Trong ví dụ này chúng ta sử dụng file booksxpath.xml Nó giống như

books.xml mà chúng ta đã dùng, ngoại trừ có một hai quyến sách được thêm

vào Bạn có thể tìm thấy mã nguồn trong thư mục XPathXSLSample1:

private void button1_Click(object sender, System.EventArgs e)

{

//modify to match your path structure

XPathDocument doc=new XPathDocument(" \\ \\ \\booksxpath.xml");

//create the XPath navigator

XPathNavigator nav=doc.CreateNavigator();

//create the XPathNodeIterator of book nodes

// that have genre attribute value of novel

XPathNodeIterator iter=nav.Select("/bookstore/book[@genre='novel']");

while(iter.MoveNext())

{

Trang 9

LoadBook(iter.Current);

}

}

private void LoadBook(XPathNavigator lstNav)

{

//We are passed an XPathNavigator of a particular book node

//we will select all of the descendents and

//load the list box with the names and values

XPathNodeIterator iterBook=lstNav.SelectDescendants

(XPathNodeType.Element,false);

while(iterBook.MoveNext())

listBox1.Items.Add(iterBook.Current.Name + ": "

+ iterBook.Current.Value);

}

Trang 10

Đầu tiên trong phương thức button1_Click() chúng ta tạo một

XPathDocument (gọi là doc), và truyền cho nó đường dẫn đến tài liệu mà

bạn muốn mở Trong dòng tiếp theo chúng ta tạo ra một XPathNavigator:

XPathNavigator nav = doc.CreateNavigator();

Trong ví dụ này, chúng ta sử dụng phương thức Select() để lấy bộ các nút có

thuộc tính loại là novel (tiểu thuyết) Sau đó chúng ta sử dụng phương thức

MoveNext() để duyệt qua các tiểu thuyết trong danh mục sách

Để load dữ liệu vào một listbox, chúng ta sử dụng thuộc tính

XPathNodeIterator.Current Nó sẽ tạo ra một đối tượng XPathNavigator mới

dựa trên nút mà XPathNodeIterator đang trỏ đến Trong trường hợp này,

chúng ta tạo một XPathNavigator cho một mục sách trong tài liệu

Phương thức LoadBook() nhận XPathNavigator này và tạo ra một

XPathNodeIterator khác bằng cách phát ra một kiểu khác của phương thức

select, phương thức SelectDescendants() Nó sẽ cho chúng ta một

XPathNodeIterator của các nút con và các nút con của các nút con này của

mục sách mà chúng ta đã truyền cho phương thức LoadBook()

Sau đó chúng ta tạo một vòng lặp MoveNext() khác trên XPathNodeIterator

và load các thành phần tên và giá trị vào listbox

Trang 11

Đây là màn hình sau khi chạy mã Nhớ rằng ở đây chỉ có các tiểu thuyết mới

được liệt kê:

Nếu muốn thêm giá cho những quyển sách này thì phải làm sao?

XPathNavigator cung cấp phương thức Evaluate() để hỗ trợ những thao tác

kiểu như thế này Evaluate() có ba quá tải Phương thức thứ nhất chứa một

chuỗi mà hàm XPath gọi Phương thức thứ hai sử dụng một tham số đối

tượng XPathExpression, phương thức thứ ba sử dụng các tham số

XPathExpression XPathNodeIterator Các thay đổi được in đậm (mã có thể

được tìm thấy trong XPathXSLSample2):

private void button1_Click(object sender, System.EventArgs e)

{

//modify to match your path structure

Trang 12

XPathDocument doc = new XPathDocument(" \\ \\ \\booksxpath.XML");

//create the XPath navigator

XPathNavigator nav = doc.CreateNavigator();

//create the XPathNodeIterator of book nodes

// that have genre attribute value of novel

XPathNodeIterator iter = nav.Select("/bookstore/book[@genre='novel']");

while(iter.MoveNext())

{

LoadBook(iter.Current.Clone());

}

//add a break line and calculate the sum

listBox1.Items.Add("========================");

listBox1.Items.Add("Total Cost = "

+ nav.Evaluate("sum(/bookstore/book[@genre='novel']/price)"));

Trang 13

}

Bây giờ, trong listbox có giá các quyển sách:

Không gian tên System.Xml.Xsl

Không gian tên System.Xml.Xsl chứa các lớp được NET Framework sử

dụng để hỗ trợ các biến đổi XSL Không gian được tham chiếu sẵn trong các

lưu trữ có thực thi giao diện IXPathNavigable.Trong NET Framework, sẵn

chứa XmlDocument, XmlDataDocument, và XPathDocument Một lần nữa

XPath là cách lưu trữ khôn ngoan nhất Nếu bạn muốn tạo một lưu trữ tùy

chọn, như file hệ thống, và bạn muốn có thể thay đổi, hãy bảo đảm rằng lớp

của bạn đã thực thi giao diện IXPathNavigable

Trang 14

XSLT dựa trên mô hình kéo Bởi vậy, bạn có thể gọp các thay đổi khác nhau

lại Nếu muốn bạn có thể áp dụng một reader tùy chọn giữa các biến đổi Nó

cho tạo ra một khả năng mềm dẻo trong thiết kế

Ngày đăng: 30/07/2014, 18:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w