Java的XML处理和解析

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

相关文章
|
8天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
25 8
|
10天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
6天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
10 0
|
6天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
25 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
10天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
23 0
|
16天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。

推荐镜像

更多