Java的XML处理和解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 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();
    }
  }
}
AI 代码解读

二、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();
    }
  }
}
AI 代码解读

三、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();
    }
  }
}
AI 代码解读

四、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();
    }
  }
}
AI 代码解读

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

目录
打赏
0
0
0
0
18
分享
相关文章
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
24 1
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
27 0
重学Java基础篇—ThreadLocal深度解析与最佳实践
ThreadLocal 是一种实现线程隔离的机制,为每个线程创建独立变量副本,适用于数据库连接管理、用户会话信息存储等场景。
33 5
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
27 5
Java机器学习实战:基于DJL框架的手写数字识别全解析
在人工智能蓬勃发展的今天,Python凭借丰富的生态库(如TensorFlow、PyTorch)成为AI开发的首选语言。但Java作为企业级应用的基石,其在生产环境部署、性能优化和工程化方面的优势不容忽视。DJL(Deep Java Library)的出现完美填补了Java在深度学习领域的空白,它提供了一套统一的API,允许开发者无缝对接主流深度学习框架,将AI模型高效部署到Java生态中。本文将通过手写数字识别的完整流程,深入解析DJL框架的核心机制与应用实践。
25 2
|
6天前
|
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
18 1
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
132 1
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
Eclipse 创建 XML 文件
Eclipse 创建 XML 文件
74 2
|
4月前
|
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
436 8

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等