Java XPath – поиск узлов XML по значению атрибута

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

1. Выражения XPath

1.1 Входной XML-файл

Сначала посмотрим на XML-файл, который мы будем читать, а затем извлечем из него информацию, используя запросы XPath.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><employees><employee id="1"><firstName>Lokesh</firstName><lastName>Gupta</lastName><department><id>101</id><name>IT</name></department></employee><employee id="2"><firstName>Brian</firstName><lastName>Schultz</lastName><department><id>102</id><name>HR</name></department></employee></employees>

1.2 Выражения XPath

Теперь рассмотрим несколько примеров построения выражения XPath.

Описание XPath
Получить все идентификаторы сотрудников /сотрудники/сотрудник/@id
Получить всех сотрудников с идентификатором, равным 1 /сотрудники/сотрудник[@id = 1]
Получить всех сотрудников с идентификатором больше 1 /сотрудники/сотрудник[@id > 1]
Получить всех сотрудников с идентификатором, содержащим 1 /employees/employee[содержит(@id,'1')]
Получить отдел всех сотрудников с идентификатором, содержащим 1 /employees/employee[содержит(@id,'1')]/department
Получить имя, идентификатор которого содержит «1» в любом дочернем узле потомок-или-я::*[содержит(@id,'1')]/firstName/text()

2. Использование XPath для поиска узлов для указанного значения атрибута

Давайте рассмотрим код, который использовался для оценки приведенных выше выражений XPath с целью выбора узлов, имеющих определенные значения атрибутов.

2.1.Оценка XPath

Чтобы оценить xpath в Java, нам необходимо выполнить следующие шаги:

  • Считать XML-файл в org.w3c.dom.Document.
  • Создайте XPathFactory с его статическим методом newInstance().
  • Получить экземпляр XPath из XPathFactory. Этот объект обеспечивает доступ к среде оценки XPath и выражениям.
  • Создайте строку выражения xpath. Преобразуйте строку xpath в объект XPathExpression с помощью метода xpath.compile().
  • Оцените xpath по отношению к экземпляру документа, созданному на первом шаге. Он вернет список узлов DOM из документа.
  • Выполните итерацию узлов и получите тестовые значения с помощью метода getNodeValue().

Следующий код создает узел DOM для XML-файла.

Выражение XPath не является потокобезопасным. Приложение отвечает за то, чтобы один объект XPathExpression не использовался более чем из одного потока в любой момент времени, и пока вызывается метод оценки, приложения не могут рекурсивно вызывать метод оценки.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setNamespaceAware(true);DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse("employees.xml");

Далее следующая функция принимает модель DOM и выражение XPath и возвращает все значения, полученные в результате вычисления выражения.

private static List<String> evaluateXPath(Document document, String xpathExpression) {XPathFactory xpathFactory = XPathFactory.newInstance();XPath xpath = xpathFactory.newXPath();List<String> values = new ArrayList<>();try {XPathExpression expr = xpath.compile(xpathExpression);NodeList nodes =(NodeList) expr.evaluate(document, XPathConstants.NODESET);for(int i = 0; i < nodes.getLength(); i++) {//Customize the code to fetch the value based on the node type and hierarchyvalues.add(nodes.item(i).getNodeValue());}} catch(XPathExpressionException e) {e.printStackTrace();}return values;}

2.2 Пример

Теперь мы можем проверить выражения, которые мы обсуждали в первом разделе. Найти значение атрибута id для всех сотрудников.

String xpathExpression = "/employees/employee/@id";evaluateXPath(document, xpathExpression);

Вывод программы:

 [1, 2]

Напишите мне ваши вопросы, связанные с тем, как найти элемент XML со значением атрибута с помощью xpath.

Прокрутить вверх