Java XPath – Как получить значение атрибута

Научитесь анализировать XML-документ и читать значение атрибута с помощью XPath в Java. Мы можем читать значение атрибута для всех его вхождений в документе или только для выбранных узлов в XML.

1. Выражение XPath для атрибутов

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

/path to/node/@attribute_name

Если мы хотим найти значение атрибута только для определенного узла, мы можем использовать выражение фильтра узла и имя атрибута в выражении следующим образом:

/path to/node[filter-expression]/@attribute_name

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

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

<?xml version="1.0" encoding="utf-8" ?><inventory><!--Test is test comment--><book year="2000"><title>Snow Crash</title><author>Neal Stephenson</author><publisher>Spectra</publisher><isbn>0553380958</isbn><price>14.95</price></book><book year="2005"><title>Burning Tower</title><author>Larry Niven</author><author>Jerry Pournelle</author><publisher>Pocket</publisher><isbn>0743416910</isbn><price>5.99</price></book><book year="1995"><title>Zodiac</title><author>Neal Stephenson</author><publisher>Spectra</publisher><isbn>0553573862</isbn><price>7.50</price></book></inventory>

Далее мы создадим экземпляр XPathExpression, как описано в руководстве по XPath.

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setNamespaceAware(true); // never forget this!DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("inventory.xml");XPathFactory xpathfactory = XPathFactory.newInstance();XPath xpath = xpathfactory.newXPath();

Затем мы будем использовать это выражение для получения значений атрибута.

Получить значение атрибута для всех вхождений атрибута

XPathExpression expr = xpath.compile("//book/@year");Object result = expr.evaluate(doc, XPathConstants.NODESET);NodeList nodes =(NodeList) result;for(int i = 0; i < nodes.getLength(); i++) {System.out.println(nodes.item(i).getNodeValue());}

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

200020051995

Получить значение атрибута только для отфильтрованных узлов

XPathExpression expr = xpath.compile("//book[author='Neal Stephenson']/@year");Object result = expr.evaluate(doc, XPathConstants.NODESET);NodeList nodes =(NodeList) result;for(int i = 0; i < nodes.getLength(); i++) {System.out.println(nodes.item(i).getNodeValue());}

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

20001995

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

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