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):

<?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>

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

//emplist/emp[@status='on']/name

Để 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:

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();
        }
    }

Chạy code trên ta có như sau:

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

Cùng ý nghĩa như trên chúng ta có thể sử dụng XQuery như sau:

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());
        }
    }
}

Kết quả:

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

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.

Advertisements

One thought on “Bài tập IXJ – Sử dụng XPath – XQuery trong Java

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s