Java的XML处理和解析

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
云解析 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();
    }
  }
}

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

相关文章
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
Most browsers have a built-in XML parser that converts XML into a JavaScript accessible object (XML DOM).
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
解析器把 XML 转换为 JavaScript 可存取的对象(XML DOM)。
|
3天前
|
安全 Java 数据处理
Java并发编程:线程同步与协作的深度解析
在探索Java并发编程的海洋中,线程同步与协作的灯塔指引着航向。本文将深入挖掘线程同步机制的核心原理,揭示锁、条件变量等工具如何确保数据的一致性和线程间有序的通信。通过案例分析,我们将解码高效并发模式背后的设计哲学,并探讨现代Java并发库如何简化复杂的同步任务。跟随文章的步伐,您将获得提升多线程应用性能与可靠性的关键技能。 【7月更文挑战第24天】
18 5
|
4天前
|
安全 Java 编译器
Java内存模型深度解析
【7月更文挑战第23天】在探索Java的高效与稳定性之谜时,我们不可避免地要深入其核心——Java内存模型(JMM)。本文将揭开JMM的神秘面纱,从基本概念到底层实现机制,再到并发编程中的应用实践,全面剖析这一确保Java程序正确性的基石。通过理解JMM的设计哲学和运作原理,开发者能够更好地编写出既高效又线程安全的代码,避免那些隐藏在多线程环境下的陷阱。
|
3天前
|
存储 监控 算法
Java中的垃圾回收机制深度解析
在Java的内存管理中,垃圾回收机制(Garbage Collection, GC)扮演着至关重要的角色。本文将深入探讨Java垃圾回收的工作原理、常见的垃圾回收算法以及调优策略,旨在帮助开发者更好地理解和掌握这一核心机制,进而优化Java应用的性能表现。
14 0
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
Most browsers have a built-in XML parser to create an XML DOM object from XML, making it accessible via JavaScript. The XML DOM includes methods for navigating, accessing, inserting, and deleting nodes in the XML tree.
|
1月前
|
XML Java 数据格式
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
深度解析 Spring 源码:从 BeanDefinition 源码探索 Bean 的本质
36 3
|
23天前
|
存储 安全 Java
深度长文解析SpringWebFlux响应式框架15个核心组件源码
以上是Spring WebFlux 框架核心组件的全部介绍了,希望可以帮助你全面深入的理解 WebFlux的原理,关注【威哥爱编程】,主页里可查看V哥每天更新的原创技术内容,让我们一起成长。
|
24天前
|
关系型数据库 分布式数据库 数据库
PolarDB-X源码解析:揭秘分布式事务处理
【7月更文挑战第3天】**PolarDB-X源码解析:揭秘分布式事务处理** PolarDB-X,应对大规模分布式事务挑战,基于2PC协议确保ACID特性。通过预提交和提交阶段保证原子性与一致性,使用一致性快照隔离和乐观锁减少冲突,结合故障恢复机制确保高可用。源码中的事务管理逻辑展现了优化的分布式事务处理流程,为开发者提供了洞察分布式数据库核心技术的窗口。随着开源社区的发展,更多创新实践将促进数据库技术进步。
30 3
|
1月前
|
XML Java 数据格式
深度解析 Spring 源码:揭秘 BeanFactory 之谜
深度解析 Spring 源码:揭秘 BeanFactory 之谜
25 1

推荐镜像

更多