Рубрики
Без рубрики

Пример руководства по Java XPath

Пример учебника Java XPath. javax.xml.xpath, XPathFactory newInstance newXPath, оценка XPathExpression, XPathConstants, исключение XPathExpressionException.

Автор оригинала: Pankaj Kumar.

Добро пожаловать в примерный учебник Java XPath. XPath предоставляет синтаксис для определения части XML-документа. Выражение XPath-это язык запросов для выбора части XML-документа на основе строки запроса. Используя выражения XPath, мы можем найти узлы в любом xml-документе, удовлетворяющем строке запроса.

Java XPath

javax.xml.xpath пакет обеспечивает поддержку XPath в Java. Для создания выражения XPath API XPath предоставляет заводские методы.

XPathFactory xpathFactory = XPathFactory.newInstance();
XPath xpath = xpathFactory.newXPath();
XPathExpression expr = xpath.compile(XPATH_EXPRESSION_STRING);
Object result = expr.evaluate(Object item, QName returnType);

Поддерживаемые типы возвращаемых данных Java XPath определены в XPathConstants class.

  1. XPathКонстанты. СТРОКА
  2. XPathКонстанты. ЧИСЛО
  3. XPathКонстанты. ЛОГИЧЕСКОЕ
  4. XPathКонстанты. УЗЕЛ
  5. XPathКонстанты. НАБОР УЗЛОВ

Пример Java XPath

В этом учебном руководстве по java XPath у нас есть следующий пример xml-файла.

В этом учебном руководстве по java XPath у нас есть следующий пример xml-файла.



	
		29
		Pankaj
		Male
		Java Developer
	
	
		35
		Lisa
		Female
		CEO
	
	
		40
		Tom
		Male
		Manager
	
	
		25
		Meghna
		Female
		Manager
	

Мы реализуем следующие функции в нашем примере программы Java XPath.

  1. Функция, которая вернет имя сотрудника для ввода идентификатора.
  2. Верните список имен сотрудников с возрастом, превышающим входной возраст.
  3. Возвращаемый список имен сотрудниц.

Вот окончательный класс реализации для примера программы Java XPath.

Вот окончательный класс реализации для примера программы Java XPath.

package com.journaldev.xml;


import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;


public class XPathQueryExample {

    public static void main(String[] args) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder;
        Document doc = null;
        try {
            builder = factory.newDocumentBuilder();
            doc = builder.parse("/Users/pankaj/employees.xml");

            // Create XPathFactory object
            XPathFactory xpathFactory = XPathFactory.newInstance();

            // Create XPath object
            XPath xpath = xpathFactory.newXPath();

            String name = getEmployeeNameById(doc, xpath, 4);
            System.out.println("Employee Name with ID 4: " + name);

            List names = getEmployeeNameWithAge(doc, xpath, 30);
            System.out.println("Employees with 'age>30' are:" + Arrays.toString(names.toArray()));

            List femaleEmps = getFemaleEmployeesName(doc, xpath);
            System.out.println("Female Employees names are:" +
                    Arrays.toString(femaleEmps.toArray()));

        } catch (ParserConfigurationException | SAXException | IOException e) {
            e.printStackTrace();
        }

    }


    private static List getFemaleEmployeesName(Document doc, XPath xpath) {
        List list = new ArrayList<>();
        try {
            //create XPathExpression object
            XPathExpression expr =
                xpath.compile("/Employees/Employee[gender='Female']/name/text()");
            //evaluate expression result on XML document
            NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < nodes.getLength(); i++)
                list.add(nodes.item(i).getNodeValue());
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return list;
    }


    private static List getEmployeeNameWithAge(Document doc, XPath xpath, int age) {
        List list = new ArrayList<>();
        try {
            XPathExpression expr =
                xpath.compile("/Employees/Employee[age>" + age + "]/name/text()");
            NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
            for (int i = 0; i < nodes.getLength(); i++)
                list.add(nodes.item(i).getNodeValue());
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }
        return list;
    }


    private static String getEmployeeNameById(Document doc, XPath xpath, int id) {
        String name = null;
        try {
            XPathExpression expr =
                xpath.compile("/Employees/Employee[@id='" + id + "']/name/text()");
            name = (String) expr.evaluate(doc, XPathConstants.STRING);
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }

        return name;
    }

}

Когда мы запускаем приведенный выше пример программы java XPath, это приводит к следующему результату.

Employee Name with ID 4: Meghna
Employees with 'age>30' are:[Lisa, Tom]
Female Employees names are:[Lisa, Meghna]

Обратите внимание, что первые несколько строк предназначены для чтения XML – файла как документа. Затем мы повторно используем документ и объект XPath во всех методах. Выше программа показывает пример НАБОРА УЗЛОВ и строки в качестве объекта результата.

Это все для быстрого обзора Java XPath.