Java的XML处理和解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Java的XML处理和解析

XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。在Java中,有许多库和工具可用于处理和解析XML。本文将介绍一些常用的Java XML处理和解析方法,并提供代码示例。

一、DOM(文档对象模型)解析器
DOM解析器将整个XML文档加载到内存中,并将其表示为一个树形结构。这使得我们可以方便地遍历和操作XML文档。

示例代码:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;

public class DOMParserExample {
   
  public static void main(String[] args) {
   
    try {
   
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("input.xml");

      document.getDocumentElement().normalize();

      NodeList nodeList = document.getElementsByTagName("book");

      for (int i = 0; i < nodeList.getLength(); i++) {
   
        Node node = nodeList.item(i);

        if (node.getNodeType() == Node.ELEMENT_NODE) {
   
          Element element = (Element) node;
          String title = element.getElementsByTagName("title").item(0).getTextContent();
          String author = element.getElementsByTagName("author").item(0).getTextContent();
          int year = Integer.parseInt(element.getElementsByTagName("year").item(0).getTextContent());

          System.out.println("Book " + (i + 1) + ":");
          System.out.println("Title: " + title);
          System.out.println("Author: " + author);
          System.out.println("Year: " + year);
          System.out.println();
        }
      }
    } catch (Exception e) {
   
      e.printStackTrace();
    }
  }
}

二、SAX(简单API for XML)解析器
SAX解析器是一种事件驱动的解析器,它逐行读取XML文档,并在解析过程中触发相应的事件。相比DOM解析器,SAX解析器更节省内存,适用于处理大型XML文档。

示例代码:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXParserExample {
   
  public static void main(String[] args) {
   
    try {
   
      SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser saxParser = factory.newSAXParser();

      DefaultHandler handler = new DefaultHandler() {
   
        boolean isTitle = false;
        boolean isAuthor = false;
        boolean isYear = false;

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
   
          if (qName.equalsIgnoreCase("title")) {
   
            isTitle = true;
          } else if (qName.equalsIgnoreCase("author")) {
   
            isAuthor = true;
          } else if (qName.equalsIgnoreCase("year")) {
   
            isYear = true;
          }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
   
          if (isTitle) {
   
            System.out.println("Title: " + new String(ch, start, length));
            isTitle = false;
          } else if (isAuthor) {
   
            System.out.println("Author: " + new String(ch, start, length));
            isAuthor = false;
          } else if (isYear) {
   
            System.out.println("Year: " + Integer.parseInt(new String(ch, start, length)));
            isYear = false;
          }
        }
      };

      saxParser.parse("input.xml", handler);
    } catch (Exception e) {
   
      e.printStackTrace();
    }
  }
}

三、JAXB(Java Architecture for XML Binding)
JAXB是Java的一种标准XML绑定技术,它可以将XML文档转换为Java对象,以及将Java对象转换为XML文档。

示例代码:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;

public class JAXBExample {
   
  public static void main(String[] args) {
   
    try {
   
      JAXBContext jaxbContext = JAXBContext.newInstance(Book.class);

      Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
      Book book = (Book) unmarshaller.unmarshal(new File("input.xml"));

      System.out.println("Title: " + book.getTitle());
      System.out.println("Author: " + book.getAuthor());
      System.out.println("Year: " + book.getYear());

      Marshaller marshaller = jaxbContext.createMarshaller();
      marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
      marshaller.marshal(book, System.out);
    } catch (Exception e) {
   
      e.printStackTrace();
    }
  }
}

四、XPath
XPath是一种用于在XML文档中定位元素的语言。在Java中,我们可以使用XPath来解析和查询XML文档。

示例代码:

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 XPathExample {
   
  public static void main(String[] args) {
   
    try {
   
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("input.xml");

      XPathFactory xPathFactory = XPathFactory.newInstance();
      XPath xPath = xPathFactory.newXPath();

      XPathExpression expression = xPath.compile("//book[year > 2000]");
      NodeList nodeList = (NodeList) expression.evaluate(document, XPathConstants.NODESET);

      for (int i = 0; i < nodeList.getLength(); i++) {
   
        System.out.println("Book " + (i + 1) + ":");
        System.out.println("Title: " + xPath.compile("title").evaluate(nodeList.item(i)));
        System.out.println("Author: " + xPath.compile("author").evaluate(nodeList.item(i)));
        System.out.println("Year: " + Integer.parseInt(xPath.compile("year").evaluate(nodeList.item(i))));
        System.out.println();
      }
    } catch (Exception e) {
   
      e.printStackTrace();
    }
  }
}

总结:
本文介绍了Java中常用的XML处理和解析方法,包括DOM解析器、SAX解析器、JAXB和XPath。根据实际需求,我们可以选择适合的方法来处理和解析XML文档。以上示例代码可以帮助读者更好地理解和使用这些方法。

相关文章
|
2天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
42 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
10天前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
7天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
30天前
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####
|
30天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
3月前
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
84 1
|
5月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
2月前
|
XML Android开发 数据格式
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
30 2
|
2月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
166 8
|
3月前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
33 3

推荐镜像

更多