Java XPath – проверка существования узла или атрибута?

Пример Java для проверки существования узла в заданном XML-содержимом или проверки существования атрибута в XML с помощью XPath.

1. Как проверить, существует ли узел или атрибут XML?

Чтобы проверить, существует ли узел или тег в XML-документе, мы можем использовать один из двух подходов:

1. Выберите узлы с помощью выражения XPath и подсчитайте совпадения.

  • «matching_nodes > ноль» означает, что XML-тег/атрибут существует.
  • «matching_nodes <= zero» означает, что XML-тег/атрибут не существует.
#Expression for finding all employee ids where id is an attribute//employees/employee/@id 

2. Функция использования count() — это выражение для прямого доступа к количеству соответствующих узлов. Если count больше нуля, то узел существует, в противном случае — нет.

#Directly count all the idscount(//employees/employee/@id)

2. Демонстрация

2.1. XML-файл

В демонстрационных целях мы используем следующий XML-файл.

 <?xml версия="1.0" кодировка="UTF-8" автономный="да"?><сотрудники><сотрудник id="1"><firstName>Локеш</firstName><lastName>Гупта</lastName><отдел><id>101</id><имя>ИТ</имя></отдел></сотрудник><сотрудник id="2"><firstName>Брайан</firstName><фамилия>Шульц</фамилия><отдел><id>102</id><имя>HR</имя></отдел></сотрудник></сотрудники>

2.2 Оценка XPath

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

import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.xpath.XPath;import javax.xml.xpath.XPathConstants;import javax.xml.xpath.XPathExpression;import javax.xml.xpath.XPathFactory;import org.w3c.dom.Document;import org.w3c.dom.NodeList;public class CheckIfNodeExists {public static void main(String[] args) throws Exception {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setNamespaceAware(true);DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("employees.xml");XPathFactory xpathfactory = XPathFactory.newInstance();XPath xpath = xpathfactory.newXPath();//1XPathExpression expr = xpath.compile("//employees/employee/@id");Object result = expr.evaluate(doc, XPathConstants.NODESET);NodeList nodes =(NodeList) result;if(nodes.getLength() > 0) {System.out.println("Attribute or Node Exists");} else {System.out.println("Attribute or Node Does Not Exist");}//2expr = xpath.compile("count(//employees/employee/@id)");result = expr.evaluate(doc, XPathConstants.NUMBER);Double count =(Double) result;if(count > 0) {System.out.println("Attribute or Node Exists");} else {System.out.println("Attribute or Node Does Not Exist");}}}

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

Attribute or Node ExistsAttribute or Node Exists

Исходный код в Github

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