Автор оригинала: 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/”