Автор оригинала: 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.
- XPathКонстанты. СТРОКА
- XPathКонстанты. ЧИСЛО
- XPathКонстанты. ЛОГИЧЕСКОЕ
- XPathКонстанты. УЗЕЛ
- 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.
- Функция, которая вернет имя сотрудника для ввода идентификатора.
- Верните список имен сотрудников с возрастом, превышающим входной возраст.
- Возвращаемый список имен сотрудниц.
Вот окончательный класс реализации для примера программы 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.