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-修改项目编码

萌狼-图2-清除缓存

【XML】Java创建XML文档的更多相关文章

  1. [java,2017-05-04] 创建word文档

    package test; import java.text.SimpleDateFormat; import java.util.Date; import com.aspose.words.Data ...

  2. java对word文档的操作(提取标题和内容等)-直接操作或poi工具包或freemarker+xml或html转word

    1,java自带工具包实现对word的排版和写入 import java.awt.Color; import java.io.FileNotFoundException; import java.io ...

  3. Java 操纵XML之创建XML文件

    Java 操纵XML之创建XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  4. poi 读取使用 Strict Open XML 保存的 excel 文档

    poi 读取使用 Strict Open XML 保存的 excel 文档 某项目有一个功能需要读取 excel 报表内容,使用poi读取时报错: 具体错误为: org.apache.poi.POIX ...

  5. xml和xsd架构文档相关知识

    1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...

  6. Java 后台创建word 文档

    ---恢复内容开始--- Java 后台创建 word 文档 自己总结  网上查阅的文档 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...

  7. java将office文档pdf文档转换成swf文件在线预览

    第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文 ...

  8. 使用Docx4j创建word文档

    原文标题:Creating Word documents with Docx4j 原文链接:http://blog.iprofs.nl/2012/09/06/creating-word-documen ...

  9. Java版office文档在线预览

    java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...

  10. 使用Java生成word文档(附源码)

    当我们使用Java生成word文档时,通常首先会想到iText和POI,这是因为我们习惯了使用这两种方法操作Excel,自然而然的也想使用这种生成word文档.但是当我们需要动态生成word时,通常不 ...

随机推荐

  1. 对于python中GIL的一些理解与代码实现

    近期看了一些关于GIL的一些内容,敲一下代码看看效果. # coding:utf-8 # GIL(Global Interpreter Lock):他只允许任何时刻只有一个线程处于执行状态,即使是在具 ...

  2. 2021年11月数据库排行解读:openGauss跃居第三,人大金仓晋身前十

    2021年11月墨天轮国产数据库流行度排行榜出炉,本月前三的数据库产品分别是:TiDB.达梦.openGauss,openGauss 数据库是首次跻身前三强. TiDB 自2020年以来,持续稳居榜首 ...

  3. 现在 Llama 具备视觉能力并可以在你的设备上运行 - 欢迎使用 Llama 3.2

    Llama 3.2 来了!今天,我们欢迎 Llama 系列的下一个版本加入 Hugging Face.这次,我们很高兴与 Meta 合作发布多模态和小型模型.在 Hub 上提供了十个开源模型 (5 个 ...

  4. 云原生周刊:Helm Charts 深入探究 | 2024.3.11

    开源项目推荐 Glasskube Glasskube 提供了一个用于 Kubernetes 的缺失的包管理器.它具有图形用户界面(GUI)和命令行界面(CLI).Glasskube 包是具备依赖感知. ...

  5. ToDesk云电脑游戏数量?高性能显卡云桌面

    玩游戏最怕遇到电脑配置跟不上,操作卡成狗不说,画面还一卡卡的,游戏体验极差. 最近被人安利了ToDesk的云电脑,可能是刚推出的,配置价格都很能打,浅用了一波拿来打APEX和荒野大镖客,体验有点惊喜到 ...

  6. 『玩转Streamlit』--页面布局

    一个优秀的数据应用不仅仅是功能的强大,更在于其用户体验的打造. 而良好的页面布局,作为用户体验的重要组成部分,不仅能够提升信息的可读性,还能引导用户高效地完成操作. 反之,混乱的布局会让人感到困惑和挫 ...

  7. swiper + ts 类型报错

    swiper + ts 类型报错 "swiper": "^9.4.1" 版本号 原因 修改 tsconfig.json 文件下面的 moduleResoluti ...

  8. Redis的ZSet底层数据结构,ZSet类型全面解析

    文章目录 一.ZSet有序集合类型 1.1 简介 1.2 应用场景 1.3 底层结构 1.4 ZSet常用命令 二.ZSet底层结构详解 2.1 数据结构 2.2 压缩列表ZipList 2.3 跳表 ...

  9. C++面经(持续更新)

    一. c,c++区别<九大点> c: 面向过程 c++: 面向对象(封装,继承,多态) 对象:对数据和作用于数据的操作组成的封装实体 类:描叙了一组有相同属性和方法的对象<虚拟> ...

  10. 3-2 C++ string类型

    目录 3.2.1 定义和初始化 3.2.2 对string的操作 (一)重要操作一览 (二)读写操作 cin/cout getline : 可读取整行 (三)获取大小 .size() (四)比较.赋值 ...