Рубрики
Без рубрики

Как подсчитать XML-элементы в Java

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

Автор оригинала: 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. Рекомендации

Оригинал: “https://mkyong.com/java/how-to-count-xml-elements-in-java-dom-parser/”