Java 操作 xml 文件之写入

手把手教你用RoboTwin训练RDT模型:从环境配置到实战微调(避坑指南) 本文提供了一份详尽的避坑指南,手把手教你如何在RoboTwin开源仿真环境中,从零开始配置环境、采集数据并完成RDT视觉语言动作模型的实战微调。文章涵盖了环境搭建、数据流水线构建、模型配置与训练等关键步骤,旨在帮助研究者和开发者高效利用仿真数据,低成本探索具身智能应用。 阅读详情

对于 Java 对 xml 文件的读写,我在网上看了很多版本,结构差不多,根据自己的理解进行了一些总结。
写入数据到 xml 相对比较简单,我总结了以下两种写入方法,仅供参考!

1、dom4j 写入

先看代码

import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlCreateAndRead {

    public static void main(String[] args) {

        //从数据库读出数据写入xml文件
        boolean flag = addCompany();

        //从xml文件读出展示到页面
//      Map<String, Object> company = findByUnitcode("736350492");

        System.out.println(flag);

    }

    /**
     * 插入对象到xml中
     * @param form
     */
    public static boolean addCompany() {
        /*
         * 1. (创建)得到Document
         * 2. (创建)得到root元素
         * 3. 要把数据对象转换成Element元素
         * 4. 把对象的属性插入到root元素中
         * 5. 回写document
         */

        //获取要写入xml文件的数据,可以从数据库获取,这里直接用一个Map对象作为例子
        Map<String,Object> comMap = new HashMap<String,Object>();
        comMap.put("UNIT_ID", "89adf979asd");
        comMap.put("UNIT_CODE", "xiaoCreate");
        comMap.put("UNIT_NAME", "上市公司");
        comMap.put("DISPLAYNAME", "北京海淀");

        try {
            // 1. 创建Docuembnt
            Document doc = DocumentHelper.createDocument();
            // 2. 创建根元素
            Element root = doc.addElement("city");
            root.addComment("文档的根city已经创建。");// 添加注释

        /*  //以下三行为追加数据到 xml 文件时 使用
            SAXReader reader = new SAXReader(); // 创建解析器
            Document doc = reader.read("E://temptest//xmlTest.xml"); // 得到Document
            Element root = doc.getRootElement(); //得到根元素
        */  
            /*
             * 3. 完成添加元素,并返回添加的元素!
             * 向root中添加一个名为company的元素!并返回这个元素
             */
            Element comElement = root.addElement("company");
            // 设置comElement的属性!
            comElement.addAttribute("unitId", (String) comMap.get("UNIT_ID"));
            comElement.addAttribute("unitCode", (String) comMap.get("UNIT_CODE"));
            comElement.addAttribute("unitName", (String) comMap.get("UNIT_NAME"));
            comElement.addAttribute("cityArea", (String) comMap.get("DISPLAYNAME"));
            // 添加comElement的子元素节点!
            comElement.addElement("unitId").addText((String) comMap.get("UNIT_ID"));
            comElement.addElement("unitCode").addText((String) comMap.get("UNIT_CODE"));
            comElement.addElement("unitName").addText((String) comMap.get("UNIT_NAME"));
            comElement.addElement("cityArea").addText((String) comMap.get("DISPLAYNAME"));

            // 创建输出流
            Writer out = new PrintWriter("E:\\temptest\\xmlTest.xml", "utf-8");
            // 格式化
            OutputFormat format = new OutputFormat("\t", true);
            format.setTrimText(true);//去掉原来的空白(\t和换行和空格)!

            XMLWriter writer = new XMLWriter(out, format);
            // 把document对象写到out流中。
            writer.write(doc);

            out.close();
            writer.close();

            return true;
        } catch(Exception e) {
            // 把编译异常转换成运行异常!
            throw new RuntimeException(e);
        }
    }
}

执行成功后,打开文件如下图:
这里写图片描述

注意:新建的 xml 文档有一种编码格式,notpad++在菜单栏的 格式 设置,editplus 可以在菜单栏的 工具-配置用户工具-文件 中设置(https://jingyan.baidu.com/article/e5c39bf58c008c39d76033f6.html);写入的内容有一种编码格式,在 Java 代码中设置

这个例子里,主要有以下功能:
+ 可以直接创建新的 xml 文件,也可以追加数据到已有的 xml 文件,注意第一二步的语句即可。
+ 可以给元素节点增加属性,当然也可以增加子元素节点
+ 注意设置编码格式
+ 如果数据不是一个对象,而是一个对象列表,那么循环增加即可

2、SAX 写入

我看到有的文章说 SAX 只支持解析 xml 文档,但是下面这个例子,我觉得是 SAX 写入的。也许是以前不支持,现在支持了吧。
同样先看例子:

import java.io.*;
import java.util.*;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.SAXException;

// SAX写入XML文件
// 参考:http://blog.csdn.net/hairongtian/article/details/7525292
public class SAXWriteTest {
    // 句柄
    private TransformerHandler handler = null;
    // 输出流
    private OutputStream outStream = null;
    // 根节点
    private String rootElement;

    public SAXWriteTest(String fileName, String rootElement) throws Exception {
        this.rootElement = rootElement;

        // 创建句柄,并设置初始参数
        SAXTransformerFactory fac = (SAXTransformerFactory) SAXTransformerFactory
                .newInstance();
        handler = fac.newTransformerHandler();
        Transformer transformer = handler.getTransformer();
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");

        outStream = new FileOutputStream(fileName);
        handler.setResult(new StreamResult(outStream));

        System.out.println("初始化成功");
    }

    public void start() throws Exception {
        handler.startDocument();
        handler.characters("\n".toCharArray(), 0, "\n".length());//给子元素节点添加缩进
        handler.startElement("", "", rootElement, null);
        System.out.println("文档开始...");
    }

    // 这个函数是最重要的,它可以控制各个细节:是否写入属性值,文本值又是多少等等
    public void write(HashMap<String, String> map, String element)
            throws SAXException {
        handler.characters("\n  ".toCharArray(), 0, "\n  ".length());//给子元素节点添加缩进
        handler.startElement("", "", element, null);
        Iterator<String> it = map.keySet().iterator();
        while (it.hasNext()) {
            String key = (String) it.next();
            String value = map.get(key);
            handler.characters("\n    ".toCharArray(), 0, "\n    ".length());//给子元素节点添加缩进
            handler.startElement("", "", key, null);
            handler.characters(value.toCharArray(), 0, value.length());
            handler.endElement("", "", key);
        }
        handler.characters("\n  ".toCharArray(), 0, "\n  ".length());//给子元素节点添加缩进
        handler.endElement("", "", element);
        System.out.println("写入元素成功!");
    }

    public void end() throws Exception {
        handler.endElement("", "", rootElement);
        handler.endDocument();
        outStream.close();
        System.out.println("文档结束!");
    }

    public static void main(String[] args) throws Exception {
        SAXWriteTest xml = new SAXWriteTest("E:\\temptest\\student.xml", "students");
        xml.start();

        HashMap<String, String> map = new HashMap<String, String>();
        map.put("id", "20050505");
        map.put("name", "zhaobenshan");
        map.put("age", "21");
        map.put("classes", "Act051");
        xml.write(map, "student");

        map = new HashMap<String, String>();
        map.put("id", "20050506");
        map.put("name", "songdandan");
        map.put("age", "20");
        map.put("classes", "Act052");
        xml.write(map, "student");

        xml.end();
    }
}

执行成功后,打开文件如下图:
这里写图片描述
这个例子也是前辈的,我主要是给子元素节点添加了缩进,相当于格式化了一下
+ 例子中也是一个对象一个对象写入的,如果需要写入对象列表,则循环即可
+ 这个例子是新建一个 xml 文档,追加的功能待研究

在 SAP HANA 里为视图创建 Analytic Privilege,真正把同一份数据按角色切开 摘要:本文介绍了SAP HANA中基于业务角色的动态数据权限控制方法。通过Analytic Privilege技术,可以在同一视图上为不同角色设置不同的数据访问范围,实现行级安全控制。核心机制包括:1) 创建带有STRUCTURED PRIVILEGE CHECK的视图;2) 建立授权对象和用户映射表;3) 开发条件提供过程动态生成过滤条件;4) 创建结构化权限对象绑定条件提供器。这种设计使权限规则与业务数据解耦,便于维护变更,适合销售区域、财务数据等多角色访问控制场景。 阅读详情

相关推荐

java读取和写入xml文件

该资源包含了java四种方式读取和写入xml文件的代码

java xml文件 数据

【代码】java xml文件 数据

2301_77033939的博客 447

ADC示例程序.zip_FM3316_FM3316 开发环境_fm3316例程_metkdo_示例程序

该程序是以FM3316为主芯片,介绍了其ADC的基本用法

JAVA xml文件读取写入数据

对于少量数据或配置信息,可通过xml文件进行管理。xml可以运用标签实现类似数据库一样的数据管理。一些配置信息,比如文件保存路径,如果将这些配置写入yml文件后读不到的话,也可以试着写入xml文件

普通还不自信的程序员 567

Java中最简单的把数据写入xml文件的方法----jdom之xml操作

一个在Java中用jdom生成xml文档的方法,需要导入jdom的jar包,可用于将数据库中或者其他数据循环输出到一个xml文档中。

lk519186921的专栏 2万+

【Servlet】把文件写到Respond输出流里面供用户下载

本文区分于《【Jsp】把Java写到Respond输出流里面供用户下载》(点击打开链接)把原本该打印到控制台的内容,直接打印到一个文本文件txt中给用户下载。 实际上是《【Struts2】中文文件的下载与下载权限的控制》(点击打开链接)不使用三大框架,纯属使用Servlet去实现,如何把在Tomcat服务端上的文件资源,给用户下载。 如下图的JavaEE目录结构,在Tomcat上Servl

编程记录,亲测有效 1万+

Java Dom 对 .xml文件 实现读取和写入操作

解决xml文件读取问题.....

yigezhuimengzhe的博客 721

java中用jdom写xml,java使用Jdom实现xml文件写入操作实例

搜索热词本文实例讲述了java使用Jdom实现xml文件写入操作的方法。分享给大家供大家参考,具体如下:package com.yanek.demo.xml.test;import java.io.File;import java.io.FileWriter;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Ele...

weixin_35531735的博客 281

java读写xml教程_java使用Jdom实现xml文件写入操作实例

本文实例讲述了java使用Jdom实现xml文件写入操作的方法。分享给大家供大家参考,具体如下:package com.yanek.demo.xml.test;import java.io.File;import java.io.FileWriter;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element...

weixin_33509600的博客 145

Java操作XML文件(1)-写入XML文件

Java写入XML文件操作: [code="java"]package xml; import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import javax.xml.parsers.DocumentBuilder; import...

chenxu_8456的专栏 232

java jdom_java使用Jdom实现xml文件写入操作实例

本文实例讲述了java使用Jdom实现xml文件写入操作的方法。分享给大家供大家参考,具体如下:package com.yanek.demo.xml.test;import java.io.File;import java.io.FileWriter;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element...

weixin_39733146的博客 173

java 文件操作,创建,删除,重命名,生成xml写入文件文件转byte,获取txt中的行数

import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import j

qq_21339919的博客 439

java读取txt文件生成xml文件_Java操作读取写入文本TXT及XML文件内容

package fileIo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;public class ReadTextFile {public BufferedRea...

weixin_35276012的博客 390

Java操作读取写入文本TXT及XML文件内容

package fileIo; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; public cl...

weixin_34413065的博客 244

Java操作XML文档(2)-写入文件

import java.io.FileWriter; import java.io.IOException; import org.dom4j.*; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class Test2 {  public static void main(String[]

playboyhdy的专栏 439

java 连接文本文档_Java操作读取写入文本TXT及XML文件内容

package fileIo;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;public class ReadTextFile {public BufferedRea...

weixin_42113380的博客 113

java 写入xml文件_java读写xml文件

要读的xml文件李华姓名>14年龄>学生>张三姓名>16年龄>学生>学生花名册>package xml;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Iterator;import java.u...

weixin_39674414的博客 158

java dom4j 读写XML配置文件

import org.dom4j.*;import org.dom4j.io.*;import java.io.*;import java.util.Iterator;public class RW { //写XML文件 public void Writer() throws IOException { Document doc = DocumentHelper.createDocument()

慕希颜 687
上一篇: Comparator 的用法
下一篇: Java 操作 xml 文件之 dom4j 解析
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值