02.使用dom4j生成xml后, 不同的处理方式

基于DOM4J的Java XML处理工程实战 DOM4J 是一个开源的 Java XML 解析库,以其灵活性和易用性在众多 XML 处理框架中脱颖而出。它结合了 SAX 的低内存消耗和 DOM 的节点操作优势,支持 XPath 查询、命名空间处理以及与 Java 集合框架无缝集成。DOM4J 是一个基于 Java 的开源库,最初由 James Strachan 于 2000 年创建,目前由 Apache 软件基金会维护。它不仅支持标准的 XML 解析与生成,还提供了丰富的 API 来操作 XML 文档的结构和内容。 阅读详情
package gov.mof.fasp.ifmis.acal.common.expxml;



import gov.mof.framework.util.DateUtil;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.text.DecimalFormat;

import javax.servlet.http.HttpServletResponse;

import oracle.sql.DATE;

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class ExpXmlUtil {
    /**
     * 构造方法设置为私有.
     */
    private ExpXmlUtil() {
        super();
    }

    /**
     * 导出凭证报文xml方法.
     * @param path --
     * @param tmpname
     * @param columns
     * @param dataList
     * @return
     * @throws IOException 
     */
    public static String expExcelTemplate(String path, String tmpname,Document document, HttpServletResponse response) throws IOException {
        /*
         *第一种处理方式:xml文件保存到服务器 
         */
//       if (tmpname == null) {
//            tmpname = "";
//        }
//        if (path == null || "".equals(path)) {
//            path = new File("").getAbsolutePath();
//            path = path.replaceAll("\\\\", "/");
//        }
//        path += "/cal/impexp/expfilebak/";
//        File f = new File(path);
//        f.mkdirs();
//        String filename = tmpname + ".xml";
//        path += filename;
//        // 封装xml报文数据
//        OutputFormat format = OutputFormat.createPrettyPrint();
//        format.setEncoding("utf-8");// 设置XML文件的编码格式
//        format.setNewLineAfterDeclaration(false);//声明之后不换行
//      //format.setSuppressDeclaration(true);// 不输出头信息
//      format.setIndent(false); //设置是否缩进
//      //format.setIndent(" "); //以空格方式实现缩进
//      format.setNewlines(true); //设置是否换行
//        
//        XMLWriter writer = null;
//        try {
//          writer = new XMLWriter(new FileWriter(path), format);//写入指定的文件
//          writer.write(document);
//      } catch (IOException e) {
//          path="";
//          e.printStackTrace();
//      } finally {
//          try {
//              writer.close();
//          } catch (IOException e) {
//              e.printStackTrace();
//          }
//      }

//        return path;

        /*
         *第二种处理方式:返回页面xml格式 
         */
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        format.setNewLineAfterDeclaration(false);//声明之后不换行
        format.setNewlines(true); //设置是否换行
        XMLWriter writer;
        try {
            writer = new XMLWriter(baos, format);
            writer.write(document);
            writer.flush();
            writer.close();

            String fileName = tmpname + DateUtil.getCurrentDateStr(DateUtil.C_DATA_PATTON_YYYYMMDD) + ".xml";
            String dispositionHeader = "attachment;filename=" + new String(fileName.getBytes(), "iso8859-1");
            // 发送中文文件名的响应头信息
            response.setHeader("Content-Disposition", dispositionHeader);
            response.setHeader("Content-Type", "application/x-msdownload; charset=gbk");
            OutputStream out = response.getOutputStream();
            out.write(baos.toByteArray());
            out.flush();
            out.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        /*
         *第三种处理方式: 同上
         */
//        InputStream fis = new ByteArrayInputStream(document.asXML().getBytes("utf-8"))  ;
//        byte[] buffer = new byte[fis.available()];
//        fis.read(buffer);
//        fis.close();
//        response.reset();
//        // 先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,这个文件名称用于浏览器的下载框中自动显示的文件名
//        response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.replaceAll(" ", "").getBytes(),"iso8859-1"));
//        OutputStream out = new BufferedOutputStream(response.getOutputStream());
//        response.setContentType("application/octet-stream");
//        out.write(buffer);// 输出文件
//        out.flush();
//        out.close();
        return null;
    }

    /**
     * 格式化金额.
     * @param amt --金额
     * @return
     */
    public static String numFormat(String amt) {
        DecimalFormat df = new DecimalFormat("#0.00");
        BigDecimal amtbd = new BigDecimal(amt);
        return df.format(amtbd);
    }

}
DOM4J完整教程:包括jaxen的XML处理 DOM4J是一个非常流行的Java开源库,它用于处理XML文档。自2000年首次发布以来,它已经成为Java开发者在处理XML时的重要工具之一。DOM4J继承了DOM API的易用性,并通过更简洁的API和更灵活的处理方式,显著提高了性能和可扩展性。Jaxen是一个开源的XML查询引擎,它允许用户以多种方式查询XML文档。其主要特点包括对XPath 1.0的支持、跨平台兼容性以及灵活的API,使其能够轻松地集成到各种Java应用程序中。 阅读详情

相关推荐

深入MIPI DSI显示技术栈 (三) DSI vs CSI-2:孪生协议的本质差异

MIPI协议中的DSI与CSI-2存在本质差异:DSI为输出导向协议(Host→Display),用于屏幕控制和画面传输;CSI-2为输入导向协议(Sensor→Host),专攻图像采集。二者在包结构、同步机制、物理层优化等方面均有显著区别:DSI支持命令包和BLLP包,CSI-2具备嵌入式数据包;DSI时钟模式以Burst为主,CSI-2支持Continuous模式。典型场景中,二者协同工作(如手机相机预览),需注意时序同步和延迟控制。设计混合系统时,需合理规划虚拟通道和物理层资源,充分发挥这对&quot

GateWorld的博客 2106

dom4j设置编码两种方法(一种不好使的原因)

1.设置编码失效,打开时为ANSI OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); format.setSuppressDeclaration(true); format.setIndent(true); //设置是否缩进 format.setIndent(" "...

godm999的博客 487

离线AI实战指南:本地部署大模型处理PDF/Word/Excel

离线AI是指在无网络、不上传数据前提下,于个人设备运行大语言模型并完成文档理解、多轮对话与代码辅助等任务的技术方案。其核心依赖本地模型推理、文档解析向量化和轻量级对话调度三大能力。随着Phi-3、Qwen2、Llama3等轻量化开源模型普及,以及Ollama、LM Studio等易用工具成熟,普通用户已可在主流笔记本上实现PDF摘要、合同比对、代码注释等真实办公场景。本文聚焦离线AI的硬件适配、模型选型、文件处理链路与知识库构建,尤其强调中文OCR支持、结构化文档提取与CPU/GPU混合推理优化,助力非开发

weixin_31968639的博客 497

JAVA 写入xml 去除头部

项目遇到的小问题记录: 这里使用的是 dom4j 在write时会自动写入一个表头<?xml version="1.0" encoding="UTF-8"?> 百度上很多说使用 document.getRootElement().asXML(); 发现不生效,最后在官方文档中找到可以设置转换参数OutputFormat /** * 写入xml * @param xmlPath xml文件地址 * @param document * @thr.

Geminates 3521

RexUniNLU零样本通用自然语言理解:nlp_deberta_rex-uninlu_chinese-base模型实战解析

本文深入解析了RexUniNLU零样本通用自然语言理解模型(nlp_deberta_rex-uninlu_chinese-base)的实战应用。通过详细的环境配置、模型加载及实战案例,展示了该模型在零样本场景下的强大能力,如实体识别和复杂关系抽取,显著提升NLP任务效率。

weixin_29088655的博客 251

STA 静态时序分析 第三章——标准单元库中的高级功耗建模与优化策略

本文深入探讨了STA静态时序分析中标准单元库的高级功耗建模与优化策略。详细解析了动态功耗和漏电功耗的精细建模技术,包括基于波形敏感的CCS模型和温度敏感的漏电模型,并介绍了多工艺角功耗建模及低功耗设计优化策略,为纳米级芯片设计提供关键能效解决方案。

weixin_29290863的博客 224

dom4j中修改XML第一行 <?xml version = ....?>

在dom4j中,XML声明没有表示为单独的元素。相反,它是XML文档格式选项的一部分。要修改XML声明,您需要使用OutputFormat类。当然,还有更好的方法,比如自己写一个WriteXML类,这样生成的XML调整encoding样式会更方便。

qq_40221737的博客 409

企业级防火墙实战:用深信服AF8.0打造安全办公网络(含流控/僵尸防护配置)

本文详细介绍了如何利用深信服AF8.0防火墙构建企业级安全办公网络,涵盖设备初始化、多接入方式配置、三维一体安全防护体系(包括应用控制、僵尸防护和智能流控)以及典型问题排查。通过实战案例和配置模板,帮助IT管理员高效部署和优化网络安全管理,提升企业网络安全防护能力。

weixin_28716443的博客 282

格式化xml字符串,并生成xml文件

最近一段时间都在研究如何生成格式化的xml文件,查了好多资料,现在总结一下,希望对大家有帮助。 下面是格式化xml字符串工具类 前提是已经生成了xml字符串 [code="java"] package util; import java.io.StringReader; import java.io.StringWriter; import ...

xiaozhijing2691的专栏 787

Openlayers 教程 02 - 地图添加 WKT WKB GeoJson 格式的点线面数据

WebGIS 开发中,对于数据量不是很大的场景,可以直接从数据库读取数据,通过创建点线面要素(Feature),然后添加到矢量图层(vectorLayer)中,在地图上展示。添加点线面的方法可以封装一下,方便使用。...

非科班Java出身GISer的博客 3859

Vue3 - 超详细最新 wangEditor V5 富文本编辑器安装引入及使用教程,提供工具栏配置、基础富文本功能、API使用示例教程等(新手小白快速引入并植入到项目中)

vue3,wangEditorv5富文本编辑器,wangEditorv5官方文档,vue3最新安装wangEditorv5富文本详细使用教程,vue3使用wangEditorv5编辑器示例代码,vue3网站网页安装植入富文本编辑器教程,vue3wangEditor使用api,vue3安装富文本控制台出现报错如何解决,vue3wangEditor-v5工具栏配置,vue3中使用富文本编译器wangEditor5的方法,wangeditor5在vue3中的全使用过程,vue3超详细最新wangedi

🏆 前端领域优质创作者 4253

dom4j vs. jdom

dom4j jdom 创建 一般采用面向接口编程,Document、Element、Attribute等均为接口,要创建这些元素一般调用或委托DocumentFactory(单例)的工厂方法完成; 元素之间的关系可由工厂方法自动维护 Document、Element、Attribute等均为类,直接使用其构造器创建对象; 元素之间的关系需要编程维

八白龙的专栏 1023

经典的YOLOv3和YOLOV5算法详解及代码复现

yolov3和yolov5算法详解及代码复现

hasakie的博客 771

Dom4j框架解析XML

XML解析是指将XML格式数据转换成计算机程序能够理解的数据结构的过程。XML解析器可以将XML文件解析成DOM(文档对象模型)、SAX(简单API for XML)等不同的数据结构。通过对XML文件进行解析,程序可以读取和操作其中的数据,从而实现对XML文件的数据分析和处理。常用的XML解析库包括Java中的DOM解析器和SAX解析器,C++中的libxml2库和TinyXML库,Python中的ElementTree库和lxml库等。

万维网连五洲,二进制写尽天下事,喜欢结识新伙伴寻找志同道合的朋友,欢迎一起探讨学习 2879

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

xml的解析DOM,SAX,DOM4J

Dom和sax解析区别: 1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式  sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析 器都支持它。 2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document 对象,从而再对XML文

小虫 4566

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

四种不同的XML解析方法

四种不同的XML解析方法: 1 DOM 工厂类:由抽象类javax.xml.parser.DocumentBuilderFactory.newInstance()获取实现工厂类 ACM工厂类: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl(ie3rdpartylibs.jar/META-INF/services/javax.xml.pa

Jeffrey's 专栏 993

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

使用dom4j操作XML

  DOM4J介绍   DOM4J是使用Java语言编写的,用于读写及操作XML的一套组件,DOM4J同时具有DOM修改文件的优点和SAX读取快速的优点。   DOM4J的使用   首先下载dom4j的JAR包,我用的版本是1.6.1,下载地址:http://download.csdn.net/detail/onroads/9721574   使用方法《使用JDOM操作XML》...

weixin_30362083的博客 103

xml解析

Java解析XML的四种方法详解 XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法 在做一般的XML数据交...

百味皆苦的博客 759

dom4j读取xml内容时丢失换行符

简单的换行,怎么这么麻烦……

Shion's bla bla blog 1808

Java进阶(五十一)XML 四种解析器(dom,sax,jdom,dom4j)原理及性能比较_java xml解析工具

dom是解析xml的底层接口之一(另一种是sax).而jdom和dom4j则是基于底层api的更高级封装。dom是通用的,具有跨语言、跨平台性,而jdom和dom4j则是面向java语言的。

2401_85158697的博客 616

XML -- 解析与写入(DOM4J)

一,dom4j方式XML文件写入 public boolean createXML() { XMLWriter writer = null; OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("utf-8"); Docume...

BearSilencer的博客 234

Java XML解析工具 dom4j介绍及使用实例

Java 有哪些优秀的类库及工具便于程序员对 XML 进行处理 ?大名鼎鼎的 DOM绿色环保的 SAX默默无闻的 Digester三种解析方式比较DOM优缺点:实现 W3C 标准,有多种编程语言支持这种解析方式,并且这种方法本身操作上简单快捷,十分易于初学者掌握。其处理方式是将 XML 整个作为类似树结构的方式读入内存中以便操作及解析,因此支持应用程序对 XML 数据的内容和结构进行修改,但是同时...

sinat_36475966的博客 5589

JAVA生成XML

DOM方式:package DomTest;import java.io.File; import java.io.IOException;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigura

砸锅工厂 5213

“用dom4j解析包”对xml进行dom方式操作--ReadXML

package edu.dom4j.dom; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import o

ITSTAR 1074

用dom4j处理XML文档(CRUD)

http://www.javaeye.com/topic/191564 (一)JDOM的介绍以及与JAXB的比较 Java + XML = JDOM ! 这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为什么要有JDOM或者是JAXB。在今年(2002)的JavaOne会议上JDOM的主要创始人Jason Hunter有一篇精彩的演讲介

风在竹林的专栏 956

dom4j操作xml基础

        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准,是以层次结构组织的节点或信息片断的集合,它总是把文档看成一个文档树,SAX处理能够立即开始,而不是等待所有的数据被处理,对于大型文档来说是个巨大的优点,JDOM无疑转为Java平台设计,它简化与XML的交互并且比使用DOM更快,但是它大量的试用具体类操作从而降低了操作的灵活性,dom4j代表了全新的开发结果,集成的XP...

iteye_10616的博客 135
上一篇: 添加字段的脚本
下一篇: xfire webservice返回xml
962464i
博客等级 码龄16年 3粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值