Thursday, September 17, 2015

Bài tập IXJ - Sử dụng XPath - XQuery trong Java

Mục tiêu: Tìm hiểu một số bước căn bản để chạy một đường dần theo qui ước XPath trong Java.
Về XPath là gì có thể tham khảo Căn bản XPath hay XPaht Tiếng việt trang 23

Ví dụ file XML như sau (Bài tập 1 DOM):

[sourcecode language="xml"]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<emplist>
<!--danh sach nhan vien-->
<emp status="on">
<id>1</id>
<name>Nancy Davolio</name>
</emp>
<emp status="on">
<id>2</id>
<name>Andrew Fuller</name>
</emp>
<emp status="on">
<id>3</id>
<name>Janet Leverling</name>
</emp>
<emp status="on">
<id>4</id>
<name>Margaret Peacock</name>
</emp>
<emp status="on">
<id>5</id>
<name>Steven Buchanan</name>
</emp>
<emp status="on">
<id>6</id>
<name>Michael Suyama</name>
</emp>
<emp status="on">
<id>7</id>
<name>Robert King</name>
</emp>
<emp status="on">
<id>8</id>
<name>Laura Callahan</name>
</emp>
<emp status="on">
<id>9</id>
<name>Anne Dodsworth</name>
</emp>
<emp status="on">
<id>10</id>
<name> </name>
</emp>
<emp status="on">
<id>11</id>
<name> </name>
</emp>
<emp status="on">
<id>12</id>
<name>mit nguyen</name>
</emp>
<!--Nhan vien cuoi cung-->
<emp status="on">
<id>13</id>
<name>mit nguyen</name>
</emp>
</emplist>
[/sourcecode]

Thiết kế XPath lấy tên nhân viên có thuộc tính status = on

[sourcecode language="java"]
//emplist/emp[@status='on']/name
[/sourcecode]

Để phân tích XPath Java cung cấp 2 Interface XPathFactoryXPath.
Code mẫu phân tích và hiển thị tên nhân viên như sau:

[sourcecode language="java"]
public static void main(String[] args) {
int count = 0;
try {
// load XML tao DOM tree
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("src/emp.xml"));
// Xu ly tim kiem qua XPath
// Khoi tao doi tuong phan tich xpath
XPathFactory xpathFactory = XPathFactory.newInstance();
// tao xpath
XPath xpath = xpathFactory.newXPath();
// tao duong dan tren xml va gan phan tich voi xpath
// ham evaluate de tien hanh phan tich
NodeList list = (NodeList) xpath.evaluate("//emplist/emp[@status='on']/name",
doc, XPathConstants.NODESET);
for (int i = 0; i < list.getLength(); i++) {
// hiển thị tên
System.out.println("Name:"+list.item(i).getTextContent());
}
} catch (Exception e) {
e.printStackTrace();
}
}
[/sourcecode]

Chạy code trên ta có như sau:
[sourcecode language="html"]
Name:Nancy Davolio
Name:Andrew Fuller
Name:Janet Leverling
Name:Margaret Peacock
Name:Steven Buchanan
Name:Michael Suyama
Name:Robert King
Name:Laura Callahan
Name:Anne Dodsworth
Name:
Name:
Name:mit nguyen
Name:mit nguyen
[/sourcecode]
Cùng ý nghĩa như trên chúng ta có thể sử dụng XQuery như sau:

[sourcecode language="java"]
import java.io.File;
import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.Nodes;
import nux.xom.xquery.XQueryUtil;
public class XQueryExample {
public static void main(String[] args) {
try {
// Parse XML document with XOM
Document doc = new Builder().build(new File("src/emp.xml"));
// Call the xquery method of the XQueryUtil class to query the XML document.
Nodes nodes = XQueryUtil.xquery(doc, "//emplist/emp");
// Print employees
System.out.print("There are " + nodes.size() + " employees ");
nodes = XQueryUtil.xquery(doc, "//emplist/emp[@status='on']/name");
// Print employees who have been work
System.out.println("but " + nodes.size() + " of them is working !");
for (int i = 0; i < nodes.size(); i++) {
System.out.println("Name: "+nodes.get(i).getValue());
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
[/sourcecode]
Kết quả:
[sourcecode language="html"]
There are 13 employees but 12 of them is working !
Name: Nancy Davolio
Name: Andrew Fuller
Name: Janet Leverling
Name: Margaret Peacock
Name: Steven Buchanan
Name: Michael Suyama
Name: Robert King
Name: Laura Callahan
Name: Anne Dodsworth
Name:
Name:
Name: mit nguyen
[/sourcecode]

Download thư viện hỗ trợ tại đây

OK, Trên đây chỉ là một ví dụ nhỏ đề hình dung về XPath trong môn học IXJ mà thôi.

1 comment:

Translate