Java生成和解析XML格式文件和字符串的实例代码

下面我将详细讲解“Java生成和解析XML格式文件和字符串的实例代码”的完整攻略以及其中的两个示例。

1. 什么是XML

XML是可扩展标记语言(Extensible Markup Language)的缩写,它是一种用于传输和存储数据的标准格式。XML是自我描述、可扩展的,可以通过文本编辑器或工具生成并解析。在Java应用程序中,XML是一种常见的数据交换格式。

2. 生成XML文件或字符串

在Java中,可以使用DOM或SAX来生成XML文件或字符串。下面分别介绍这两种生成方式的实现。

2.1 使用DOM生成XML文件或字符串

DOM是一种基于内存的解析方式,在生成XML文档时,它会先将整个文档加载到内存中,然后在内存中进行操作,最后再将整个文档输出到文件或字符串中。下面是一个使用DOM生成XML文件或字符串的示例代码:

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

import java.io.File;

public class DomWriter {
    public static void main(String[] args) {
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.newDocument();

            // 父节点
            Element rootElement = doc.createElement("root");
            doc.appendChild(rootElement);

            // 子节点
            Element childElement = doc.createElement("child");
            rootElement.appendChild(childElement);
            childElement.appendChild(doc.createTextNode("Hello World"));

            // 输出到文件或字符串
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);

            // 输出到文件
            StreamResult result = new StreamResult(new File("output.xml"));
            transformer.transform(source, result);

            // 输出到字符串
            StringWriter writer = new StringWriter();
            transformer.transform(source, new StreamResult(writer));
            String xmlString = writer.getBuffer().toString();

            System.out.println(xmlString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.2 使用SAX生成XML文件或字符串

SAX是一种基于事件流的解析方式,在生成XML文档时,它会将文档的不同部分分成不同的事件,并且在解析时一次只处理一个事件,适用于较大的XML文件。下面是一个使用SAX生成XML文件或字符串的示例代码:

import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;

import java.io.File;
import java.io.FileWriter;

import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;

public class SaxWriter extends DefaultHandler {
    private String elementName;
    private FileWriter writer;

    public SaxWriter(String fileName) throws Exception {
        writer = new FileWriter(new File(fileName));
    }

    public void startDocument() {
        try {
            writer.write("<?xml version=\"1.0\"?>\n");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void endDocument() {
        try {
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void startElement(String uri, String localName, String qName, Attributes attributes) {
        try {
            elementName = qName;
            writer.write("<" + qName + ">");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void endElement(String uri, String localName, String qName) {
        try {
            writer.write("</" + qName + ">");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void characters(char ch[], int start, int length) {
        String value = new String(ch, start, length).trim();
        if (value.length() > 0) {
            try {
                writer.write(value);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        try {
            String fileName = "output.xml";
            SaxWriter handler = new SaxWriter(fileName);

            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();

            parser.parse(new File(fileName), handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 解析XML文件或字符串

在Java中,可以使用DOM、SAX或StAX来解析XML文件或字符串。下面介绍这三种解析方式的实现。

3.1 使用DOM解析XML文件或字符串

DOM是一种基于内存的解析方式,在解析XML文档时,它会先将整个文档加载到内存中,然后在内存中进行操作。下面是一个使用DOM解析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;

import java.io.File;

public class DomReader {
    public static void main(String[] args) {
        try {
            File inputFile = new File("input.xml");

            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(inputFile);

            // 获取根节点
            doc.getDocumentElement().normalize();
            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            // 获取子节点
            NodeList nList = doc.getElementsByTagName("child");
            System.out.println("----------------------------");

            for (int i = 0; i < nList.getLength(); i++) {
                Node nNode = nList.item(i);
                System.out.println("\nCurrent Element :" + nNode.getNodeName());
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element eElement = (Element) nNode;
                    System.out.println("Child element content: " + eElement.getTextContent());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.2 使用SAX解析XML文件或字符串

SAX是一种基于事件流的解析方式,在解析XML文档时,它会将文档的不同部分分成不同的事件,并且在解析时一次只处理一个事件,适用于较大的XML文件。下面是一个使用SAX解析XML文件或字符串的示例代码:

import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;

import java.io.File;

import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;

public class SaxReader extends DefaultHandler {
    private String currentElement;

    public void startElement(String uri, String localName, String qName, Attributes attributes) {
        currentElement = qName;
    }

    public void characters(char[] ch, int start, int length) {
        String content = new String(ch, start, length);
        if (currentElement.equals("child")) {
            System.out.println("Child element content: " + content);
        }
    }

    public static void main(String[] args) {
        try {
            String fileName = "input.xml";
            SaxReader handler = new SaxReader();

            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser parser = factory.newSAXParser();

            parser.parse(new File(fileName), handler);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.3 使用StAX解析XML文件或字符串

StAX是Sax和DOM结合的解析方式,它同时具备了Sax的流式处理和DOM的便利操作。下面是一个使用StAX解析XML文件或字符串的示例代码:

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;

import java.io.FileInputStream;

public class StaxReader {
    public static void main(String[] args) {
        try {
            String xmlFile = "input.xml";

            XMLInputFactory factory = XMLInputFactory.newInstance();
            XMLStreamReader reader = factory.createXMLStreamReader(new FileInputStream(xmlFile));

            String currentElement = "";
            while (reader.hasNext()) {
                int event = reader.next();
                switch (event) {
                    case XMLStreamConstants.START_ELEMENT:
                        currentElement = reader.getLocalName();
                        break;
                    case XMLStreamConstants.CHARACTERS:
                        String content = reader.getText().trim();
                        if (currentElement.equals("child")) {
                            System.out.println("Child element content: " + content);
                        }
                        break;
                    case XMLStreamConstants.END_ELEMENT:
                        currentElement = "";
                        break;
                }
            }

            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

至此,我们就完成了Java生成和解析XML格式文件和字符串的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java生成和解析XML格式文件和字符串的实例代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Spring AOP核心功能示例代码详解

    关于《Spring AOP核心功能示例代码详解》的攻略,我会从以下三个方面详细讲解。 一、背景介绍 Spring AOP是Spring框架的一个核心组件,它提供了一种在方法调用时动态地将代码织入到原始方法体中的能力,从而可在保持应用程序开发简单性的前提下,实现横切关注点的模块化复用。 在学习Spring AOP的过程中,我们需要了解一些基本概念,例如: 连接…

    Java 2023年5月19日
    00
  • 类加载器委托机制是如何工作的?

    以下是关于类加载器委托机制的完整使用攻略: 类加载器委托机制是什么? 类加载器委托机制是Java虚拟机(JVM)用来加载类的一种机制。当一个类需要被加载时,JVM会先委托给当前类加载器进行加载,如果当前类加载器无法加载该类,则会将该请求委托给父类加载器进行加载。父类加载器也无法加载该类,则会继续向上委托,直到顶层的父类加载器为止。如果顶层的父类加载器仍然无法…

    Java 2023年5月12日
    00
  • Java零基础教程之Windows下安装、启动Tomcat服务器方法图解(免安装版)

    Java零基础教程之Windows下安装、启动Tomcat服务器方法图解(免安装版) 简介 本文主要介绍在Windows系统下,如何安装、启动Tomcat服务器,并提供免安装版步骤图解。 准备 在开始安装Tomcat服务器之前,需要满足以下条件: 安装Java开发工具包(JDK) 下载Tomcat服务器 安装JDK 在官网Java SE下载页面下载适用于Wi…

    Java 2023年5月20日
    00
  • java字符串常用操作方法(查找、截取、分割)

    Java字符串常用操作方法攻略 Java字符串是指包含零个或多个字符的对象。字符串常用于存储和操作文本数据,因此,字符串的操作方法在程序开发中非常重要。本文将介绍Java字符串常用操作方法,包括查找、截取和分割。 1. 查找 1.1 indexOf和lastIndexOf方法 indexOf方法返回指定子字符串第一次出现的位置,如果子字符串未找到则返回-1。…

    Java 2023年5月26日
    00
  • 如何测试Spring MVC应用

    以下是关于“如何测试Spring MVC应用”的完整攻略,其中包含两个示例。 1. 前言 Spring MVC是一种基于Java的Web框架,它提供了一种灵活的方式来开发Web应用程序。在开发Spring MVC应用程序时,测试是非常重要的一部分。本攻略将详细讲解如何测试Spring MVC应用程序。 2. 测试Spring MVC应用程序的方法 Sprin…

    Java 2023年5月16日
    00
  • SpringBoot实现自定义启动器的示例详解

    下面我将为您详细讲解“SpringBoot实现自定义启动器的示例详解”。 一、什么是自定义启动器 在SpringBoot应用中,我们会使用很多依赖项,每个依赖项都需要配置一些基本的内容,为了方便我们的使用,SpringBoot提供了自定义启动器的机制。自定义启动器简单来说,就是一个依赖项,可以封装一系列的配置,使其它应用可以在不了解具体细节的情况下使用这个依…

    Java 2023年5月15日
    00
  • Tomcat源码导入idea的方法

    以下是详细的Tomcat源码导入idea的方法: 步骤一:下载Tomcat源码并解压 首先,你需要在Apache Tomcat下载页面[https://tomcat.apache.org/download-80.cgi]上下载该版本的Tomcat源码,然后将其解压到任意目录。 步骤二:安装Java和IDEA 在继续之前,你需要先安装Java和IDEA。确保你…

    Java 2023年6月15日
    00
  • 字符编码的处理和BeanUtils组件使用详解

    字符编码的处理攻略 在Web应用程序开发中,我们经常需要处理字符编码,以保证在不同的操作系统和浏览器下,都能正确地显示和处理中文等特殊字符。 了解字符编码 在处理字符编码之前,我们需要了解一些相关知识。常见的字符编码有以下几种: ASCII码,包含128个字符,不支持中文等特殊字符。 ISO-8859编码,包含了欧洲常见的语言字符,但不支持中文等特殊字符。 …

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部