Автор оригинала: mkyong.
В этой статье показано, как использовать DOM синтаксический анализатор, SAX синтаксический анализатор и XPath для подсчета количества указанного XML-элемента в Java.
Содержание
- 1. XML-файл
- 2. Подсчитайте XML-элементы (анализатор DOM)
- 3. Подсчитайте XML-элементы (XPath)
- 4. Подсчитайте элементы XML (синтаксический анализатор SAX)
- 5. Скачать Исходный Код
- 6. Рекомендации
P.S Протестирован с Java 11.
1. XML-файл
Ниже приведен XML-файл для тестирования, и позже во всех примерах будет подсчитано количество XML-элементов, известных как “персонал”, и результат будет равен 2.
mkyong support yflow admin
2. Подсчитайте XML-элементы (анализатор DOM)
// DOM APIs NodeList list = doc.getElementsByTagName("staff"); System.out.println(list.getLength()); // 2
Ниже приведен полный пример синтаксического анализатора DOM для подсчета количества элементов “персонал” в XML-файле.
package com.mkyong.xml.dom; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class CountElementXmlDomParser { private static final String FILENAME = "src/main/resources/staff.xml"; public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try (InputStream is = new FileInputStream(FILENAME)) { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(is); // get all elements known as "staff" NodeList list = doc.getElementsByTagName("staff"); System.out.println("Number of staff elements : " + list.getLength()); } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } } }
Выход
Number of staff elements : 2
3. Подсчитайте XML-элементы (XPath)
XPath xpath = XPathFactory.newInstance().newXPath(); NodeList nodes = (NodeList) xpath.evaluate("//staff", doc, XPathConstants.NODESET); int count = nodes.getLength();
Ниже приведен полный пример DOM и XPath для подсчета количества элементов “персонал” в XML-файле.
package com.mkyong.xml.dom; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; 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.XPathExpressionException; import javax.xml.xpath.XPathFactory; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class CountElementXmlDomXPath { private static final String FILENAME = "src/main/resources/staff.xml"; public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try (InputStream is = new FileInputStream(FILENAME)) { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(is); // get all elements known as "staff" // xpath XPath xpath = XPathFactory.newInstance().newXPath(); NodeList nodes = (NodeList) xpath.evaluate("//staff", doc, XPathConstants.NODESET); int count = nodes.getLength(); System.out.println("Number of staff elements : " + count); } catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException e) { e.printStackTrace(); } } }
Выход
Number of staff elements : 2
4. Подсчитайте элементы XML (синтаксический анализатор SAX)
Ниже приведен полный пример синтаксического анализатора SAX для подсчета количества элементов “персонал” в XML-файле.
4.1 Мы можем создать обработчик SAX и подсчитать элементы в методе startElement()
.
package com.mkyong.xml.sax.handler; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class CountElementHandlerSax extends DefaultHandler { private final String elementName; private Integer count = 0; public String getElementName() { return elementName; } public Integer getCount() { return count; } public CountElementHandlerSax(String elementName) { this.elementName = elementName; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase(getElementName())) { count++; } } }
4.2 Запустите синтаксический анализатор SAX с помощью вышеупомянутого Обработчика элементов Count Sax
.
package com.mkyong.xml.sax; import com.mkyong.xml.sax.handler.CountElementHandlerSax; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.IOException; public class ReadXmlSaxParser { private static final String FILENAME = "src/main/resources/staff.xml"; public static void main(String[] args) { SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); // count elements name known as "staff" CountElementHandlerSax countStaffHandler = new CountElementHandlerSax("staff"); saxParser.parse(FILENAME, countStaffHandler); System.out.println("Number of staff elements : " + countStaffHandler.getCount()); } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } } }
Выход
Number of staff elements : 2
5. Скачать Исходный Код
$клон git $клон git
$компакт-диск java-xml
$cd src/основной/java/com/mkyong/xml/дом/
$cd src/основной/java/com/mkyong/xml/саксофон/
6. Рекомендации
- Википедия – DOM (Объектная модель документа)
- Википедия – SAX (Простой API для XML)
- Википедия – XPath
- Объектная модель Oracle – Документа
- Как читать XML–файл на Java – (DOM-анализатор)
- Как читать XML–файл на Java – (синтаксический анализатор SAX)
- Пример JAXB привет, мир
- Как подсчитать глубину XML-документа (анализатор DOM)
Оригинал: “https://mkyong.com/java/how-to-count-xml-elements-in-java-dom-parser/”