You are on page 1of 4

Tìm kiếm một element trong XML là công việc được thực hiện rất phổ biến.

Ta tìm kiếm các element chủ yếu qua tên,


thuộc tính của element đó.
Để thực hiện tìm kiếm, ta có thể sử dụng GetElementsByTagName() của XmlDocument để lấy về danh sách các node
XmlNodeList hoặc sử dụng XPath – là một cách cao cấp hơn.

1. Tìm kiếm theo XmlNodeList


Trong ví dụ sau, ta sẽ tìm tên của diễn viên đóng trong phim “Tear of the Sun”.
Ta sẽ bắt đầu với việc tìm các DVD có Title = "Tear of the Sun" bằng hàm GetElementsByTagName("Title"). Sau đó ta
sẽ duyệt các DVD này và tìm tên các diễn viên tham gia.
static void Main(string[] args)

string fileName = "DVDList.xml";

string content = SearchByXMLNodeList(fileName);

private static string SearchByXMLNodeList(string fileName)

XmlDocument xmlDocument = new XmlDocument();

xmlDocument.Load(fileName);

// Search all film's title

XmlNodeList nodeList = xmlDocument.GetElementsByTagName("Title");

StringBuilder sb = new StringBuilder();

foreach (XmlNode node in nodeList)

string title = node.ChildNodes[0].Value;

sb.AppendLine(title);

Biên tập: thienthanit@yahoo.com Nguồn: Internet


if (title.Equals("Tear of the Sun"))

XmlNode parentNode = node.ParentNode;

XmlNodeList starList =

((XmlElement)parentNode).GetElementsByTagName("Star");

foreach (XmlNode star in starList)

sb.Append(" - Star: ");

sb.AppendLine(star.ChildNodes[0].Value);

return sb.ToString();

2. Tìm kiếm theo XPath


Sử dụng GetElementByTagName() thực sự có rất nhiều hạn chế. Phương thức này chỉ cho phép ta tìm kiếm theo tên
của element.
Việc này khiến người ta suy nghĩ đến một cách thức tìm kiếm cho phép lọc dữ liệu theo element và theo thuộc tính.
XPath hoạt động theo phương thức này
Cấu trúc XML có dạng cây, XPath có dạng là đường dẫn từ Root đến bất kỳ node hay attribute nào. Sử dụng phương
thức SelectNodes() của XmlDocument để tìm kiếm một node bất kỳ

Biên tập: thienthanit@yahoo.com Nguồn: Internet


Ví dụ về sử dụng XPath
- Tìm các tên phim thuộc vào Category
xPath = "/DVDList/DVD/Title[../@Catagory='War']";
- Tìm Category của DVD có ID = 2
xPath = "/DVDList/DVD/@Catagory[../@ID='2']";
- Tìm DVD mà Title bắt đầu bằng chữ 't'
xPath = "/DVDList/DVD[starts-with(Title,'t')]";
- Tìm DVD mà Title có chứa chữa 't'
xPath = "/DVDList/DVD[contains(Title,'t')]";
- Tìm mã số ID của các phim mà có diễn viên Bruce Willis tham gia
xPath = "/DVDList/DVD/@ID[../Stars/Star='Bruce Willis']";
- Tìm các DVD có ID >= 2
xPath = "/DVDList/DVD[@ID >= 2]";
- Tìm các DVD phát hành sau ngày 08/06/2008
xPath = "/DVDList/DVD[translate(@Date,'/','') > 08062008]";
private static string SearchByXPath(string fileName)

// Create document

XmlDocument xmlDocument = new XmlDocument();

// Load xml's content to memory

xmlDocument.Load(fileName);

Biên tập: thienthanit@yahoo.com Nguồn: Internet


// Get DVD's ID that Bruce Willis cast

xPath = "/DVDList/DVD/@ID[../Stars/Star='Bruce Willis']";

// Select nodes by XPath

XmlNodeList nodeList = xmlDocument.SelectNodes(xPath);

StringBuilder sb = new StringBuilder();

foreach (XmlNode node in nodeList)

sb.AppendLine(node.ChildNodes[0].Value);

return sb.ToString();

File XML dùng trong ví dụ


DVDList.xml

Biên tập: thienthanit@yahoo.com Nguồn: Internet

You might also like