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日

相关文章

  • 2022版IDEA创建一个maven项目的超详细图文教程

    下面我将为您详细讲解如何在2022版IDEA中创建一个maven项目的超详细图文教程。 步骤一:打开IDEA并创建一个新项目 打开2022版的IDEA,选择”Create New Project”(新建项目)。 在弹出窗口中,选择”Maven”项目类型,并点击”Next”。 在下一个窗口中选择”Maven Quickstart Archetype”原型(注意…

    Java 2023年5月20日
    00
  • Spring MVC中@Controller和@RequestMapping注解使用

    在Spring MVC中,@Controller和@RequestMapping是两个重要的注解,它们用于定义控制器和请求映射。本文将详细介绍@Controller和@RequestMapping注解的使用方法,并提供两个示例来说明这些方法的使用。 @Controller注解 @Controller注解用于定义控制器类。在Spring MVC中,控制器类负责…

    Java 2023年5月17日
    00
  • SpringData @Query和@Modifying注解原理解析

    当使用Spring Data JPA进行数据库操作时,我们可能需要对一些自定义查询进行优化。Spring Data提供了@Query和@Modifying注解来支持这种自定义查询操作。 @Query注解 @Query注解可以被使用在repository接口的方法上,它可以用于定义一个自定义的查询语句。 Spring Data JPA将@Query注解和方法的…

    Java 2023年5月20日
    00
  • 关于MyBatis10种超好用的写法(收藏)

    下面我将为你详细讲解“关于MyBatis10种超好用的写法(收藏)”的完整攻略。 首先,这篇攻略详细介绍了 MyBatis 框架的 10 种超好用的写法,这包括代码优化、动态SQL、可重用的SQL段等等。具体的写法包括: MyBatis 缓存优化 MyBatis 批处理插入 MyBatis 动态表名 MyBatis 动态 SQL MyBatis In 操作简…

    Java 2023年6月1日
    00
  • Spring MVC文件配置以及参数传递示例详解

    下面是关于“Spring MVC文件配置以及参数传递示例详解”的完整攻略,包含两个示例说明。 Spring MVC文件配置以及参数传递示例详解 Spring MVC是一个流行的Java Web框架,它可以帮助我们更加方便地构建Web应用程序。本文将介绍如何使用Spring MVC文件配置来配置控制器和视图,并演示如何使用控制器来处理参数传递。 步骤一:创建S…

    Java 2023年5月17日
    00
  • 深入理解JVM之Java对象的创建、内存布局、访问定位详解

    深入理解JVM之Java对象的创建、内存布局、访问定位详解 Java对象的创建 在Java中,创建对象最常见的方法就是使用关键字new,通过调用构造方法创建对象。在创建对象时,会先在堆内存中申请一块连续的内存空间,用于存储对象的属性。 Java对象的创建过程可以分为以下几个步骤: 加载类:在Java程序中使用到某个类时,JVM会首先查找并加载该类的类文件。 …

    Java 2023年5月26日
    00
  • Struts2的输入校验实例代码

    下面我将为您详细讲解“Struts2的输入校验实例代码”的完整攻略。 简介 在Web开发中,输入校验是非常重要的一部分,能够有效地防止非法输入,保证系统安全性和稳定性。Struts2框架提供了丰富的输入校验机制,开发者可以根据业务需求灵活使用。 添加依赖 要在 Struts2 中使用输入校验,需要添加相关依赖包。在 Maven 项目中,可以通过在 pom.x…

    Java 2023年6月15日
    00
  • Tomcat 9 免安装版配置的图文教程(详)

    下面我将为您详细讲解“Tomcat 9 免安装版配置的图文教程(详)”的完整攻略。 一、前言 在本攻略中,我将为您介绍如何配置Tomcat 9免安装版,以便在Windows电脑上搭建Java Web开发环境。Tomcat是一种非常流行的Java应用服务器,由Apache提供支持,并且具有良好的性能和稳定性。本攻略中的操作步骤适用于Windows 7、Wind…

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