【XML】Java创建XML文档

简介: 【XML】Java创建XML文档
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-修改项目编码

q2.png

萌狼-图2-清除缓存

q1.png

相关文章
|
2月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
使用Java和XPath在XML文档中精准定位数据
|
2月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
76 1
|
5天前
|
Java Linux
java读取linux服务器下某文档的内容
java读取linux服务器下某文档的内容
16 3
java读取linux服务器下某文档的内容
|
2月前
|
XML 存储 JavaScript
在 Java 中如何将 ArrayList 转换为 XML
【8月更文挑战第23天】
14 3
|
2月前
|
Java API 数据中心
百炼平台Java 集成API上传文档到数据中心并添加索引
本文主要演示阿里云百炼产品,如何通过API实现数据中心文档的上传和索引的添加。
|
2月前
|
XML Java 数据格式
基于Java+freemarker实现动态赋值以及生成Word文档
使用Java和Freemarker技术实现动态数据填充到Word文档模板并生成新的Word文档。
118 0
基于Java+freemarker实现动态赋值以及生成Word文档
|
1月前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
306 0
|
2月前
|
XML 自然语言处理 Java
Java 中的 XML 数据绑定
【8月更文挑战第22天】
17 0
|
3月前
|
JavaScript Java
Java 将Markdown文件转换为Word和PDF文档
【7月更文挑战第5天】Java中使用`Spire.Doc for Java`库可方便地将Markdown转换为Word或PDF。基本步骤包括导入模块,创建`Document`对象,加载Markdown文件,然后保存为目标格式(`.docx`或`.pdf`)。若遇到`Invalid UTF-8 stream`错误,需确保Markdown文件是UTF-8无BOM编码。页面设置可通过`PageSetup`类调整。注意,实际应用会依据具体需求和环境有所调整。
156 6
|
2月前
|
自然语言处理 Java 索引
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
31 0
下一篇
无影云桌面