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文档。以上示例代码可以帮助读者更好地理解和使用这些方法。

相关文章
|
5天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
3天前
|
Java 程序员 开发者
Java中的异常处理机制深度解析
本文旨在深入探讨Java中异常处理的核心概念与实际应用,通过剖析异常的本质、分类、捕获及处理方法,揭示其在程序设计中的关键作用。不同于常规摘要,本文将直接切入主题,以简明扼要的方式概述异常处理的重要性及其在Java编程中的应用策略,引导读者快速把握异常处理的精髓。
|
1天前
|
安全 Java 开发者
Java并发编程中的锁机制解析
本文深入探讨了Java中用于管理多线程同步的关键工具——锁机制。通过分析synchronized关键字和ReentrantLock类等核心概念,揭示了它们在构建线程安全应用中的重要性。同时,文章还讨论了锁机制的高级特性,如公平性、类锁和对象锁的区别,以及锁的优化技术如锁粗化和锁消除。此外,指出了在高并发环境下锁竞争可能导致的问题,并提出了减少锁持有时间和使用无锁编程等策略来优化性能的建议。最后,强调了理解和正确使用Java锁机制对于开发高效、可靠并发应用程序的重要性。
9 3
|
5天前
|
存储 监控 算法
Java中的内存管理与垃圾回收机制解析
本文深入探讨了Java编程语言中的内存管理策略和垃圾回收机制。首先介绍了Java内存模型的基本概念,包括堆、栈以及方法区的划分和各自的功能。进一步详细阐述了垃圾回收的基本原理、常见算法(如标记-清除、复制、标记-整理等),以及如何通过JVM参数调优垃圾回收器的性能。此外,还讨论了Java 9引入的接口变化对垃圾回收的影响,以及如何通过Shenandoah等现代垃圾回收器提升应用性能。最后,提供了一些编写高效Java代码的实践建议,帮助开发者更好地理解和管理Java应用的内存使用。
|
3天前
|
XML Web App开发 JavaScript
|
20天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
53 6
|
5天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
5天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。

推荐镜像

更多