首页 > 编程语言 >【XML】Java创建XML文档

【XML】Java创建XML文档

时间:2022-10-24 10:13:48浏览次数:63  
标签:XML xml Java doc 文档 new import javax


package example01;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;


public class doit {
    public static void main(String[] args) {
        Document doc =  createDocument();
        Element root = doc.createElement("students");
        doc.appendChild(root);
        addStudentInfo(doc,root,"王宏","20100101","96","88","90");
        addStudentInfo(doc,root,"李娜","20100102","75","56","70");
        addStudentInfo(doc,root,"孙武","20100103","77","70","20");
        outputXMLFile(doc,"student.xml");
    }
    /* 通过DOM解析器创建一个空的Document对象 */
    public static Document createDocument() {
        // 通过newInstance方法创建DocumentBuilderFactory对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        Document doc = null;
        try {
            // 创建解析器对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            // 创建一个空的Document对象
            doc = db.newDocument();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        return doc;
    }
    public static void addStudentInfo(Document doc,Element root,String studentName,String studentId,String javaContent,String OracleContent,String umlContent){
        Element student = doc.createElement("student");
        student.setAttribute("id",studentId);
        root.appendChild(student);
        Element name = doc.createElement("name");
        name.setTextContent(studentName);
        student.appendChild(name);
        Element java = doc.createElement("java");
        java.setTextContent(javaContent);
        student.appendChild(java);
        Element oracle = doc.createElement("oracle");
        oracle.setTextContent(OracleContent);
        student.appendChild(oracle);
        Element uml = doc.createElement("uml");
        uml.setTextContent(umlContent);
        student.appendChild(uml);
    }
    /* 将内存中的DOM树输出为一个xml文档 */
    public static void outputXMLFile(Document doc,String filename) {
        try {
            TransformerFactory tff = TransformerFactory.newInstance();
            Transformer tf = tff.newTransformer();
            //设置输出XML文件的换行
            tf.setOutputProperty(OutputKeys.INDENT, "yes");
            //设置输出XML文件的缩进
            tf.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
            //把DOM对象转换为XML对象
            DOMSource source = new DOMSource(doc);
            //创建一个输出XML文件对象
            //StreamResult result = new StreamResult(new File(filename));
            StreamResult result = new StreamResult(new PrintStream(new FileOutputStream(filename),true, StandardCharsets.UTF_8));
            //把XML源代码输出为XML文件
            tf.transform(source, result);
        } catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }

    }
}

关于编码问题

保存的XML是UTF-8格式

整个java项目也是UTF-8格式

我在写的过程中遇到了保存出来的XML文件有中文乱码的问题。

事情是这样的,老师发的Java文件是Eclipse写的,我用的Idea打开,然后打开中文乱码

于是我就把Java文件项目编码调成了GBK,结果写出来的文件就中文乱码了。

所以我在输出文件的函数那,把StreamResult result = new StreamResult(new File(filename));改成了StreamResult result = new StreamResult(new PrintStream(new FileOutputStream(filename),true, StandardCharsets.UTF_8));

你可以试一试这样,但是我这样并没有生效。

萌狼蓝天的解决方法是:

把项目编码,Java文件编码都设置成UTF-8,清除缓存重新启动即可。

萌狼-图1-修改项目编码

image

萌狼-图2-清除缓存

image

标签:XML,xml,Java,doc,文档,new,import,javax
From: https://www.cnblogs.com/mllt/p/java_create_xml_file.html

相关文章

  • JavaScript发展史和JavaScript语法与html结合方式
    JavaScript发展史JavaScript发展史:1.1992年,Nombase公司,开发出第一门客户端脚本语言,专门用于表单的校验。命名为:C--,后来更名为:ScriptEase2.1995年,Netscape(网景)......
  • JavaScript简介
    JavaScript简介概念:一门客户端脚本语言运行在客户端浏览器中的。每一个浏览器都有javascript的解析引擎脚本语言:不需要编译,直接就可以被浏览器解析执行了功能:......
  • day16 正则表达式 & 反射 & Java内存模型(JMM)
    day16class1)获取一个类的所有信息(变量、方法、构造方法)2)创建类对象newInstance()Field1)访问变量或给变量赋值Method1)执行具体类对象的指定方法3.Method(获取方法对......
  • Java多线程(3):ThreadPool(上)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 开完一趟车完整的过程是启动、行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速、频繁地踩刹车等动作。因......
  • Java生产者消费者问题-多线程-线程同步-线程安全-线程通信
    packageA_ShangGuiGu.Thread.ThreadTest;/***生产者消费者问题:生产者(Producer)将商品(commodity)交给商店(Shop),消费者(Consumer)进行消费*商店里的商品数量上限为20......
  • java后台远程调用获取文件
    模拟本地服务为文件服务器(两种提供方式):假设本地文件为服务器,提供文件获取服务方法一:直接将输出流放入response里面作为响应@RequestMapping(value="/getUrlDownload",m......
  • java下载pdf等静态文件
    packagecom.example.climbnumber;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.URL;importjava.net......
  • 论 C++、C、Go 和 Java 的最大不同
     一、C++、C、Go中的如下语句:structxxx s1;vector<int>v;(甚至会调构造函数!)varABCsomeType其实会创建一个能用的对象!!、之后用他们进行操作......
  • 小白学习之路--java开发环境
    开发环境安装jdk市面企业主流还是jdk8我这就随便提供一个链接,网上实在是太多了,随便百度,面向百度编程jdk安装教程这个大佬写的挺全的IDE这个ide的话,我接触的有id......
  • Java异常的捕获和处理
    ......