热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XML——写出XML文档(XSLT+StAX)

【0】README0.1)本文描述部分转自corejavavolume2,旨在理解XML——写出XML文档(XSLT+StAX)的基础知识;0.2)for

【0】README

0.1) 本文描述部分转自 core java volume 2 , 旨在理解 XML——写出XML文档(XSLT+StAX) 的基础知识 ;
0.2) for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter2/generateXML/


【1】写出文档(使用了 XSLT-eXtensible Stylesheet Language Transformation)

1) 使用XSLT写出XML: 把DOM 树写出到输入流中, 最容易的方式是使用可扩展的格式页转换(eXtensible Stylesheet Language Transformation)API; (干货——XSLT定义)
2)我们把“不做任何操作”的转换应用与文档,并且捕获它的输出。 为了将 DOCTYPE 节点纳入输出,我们还需要将 SYSTEM 和 PUBLIC 标识符设置为输出属性;
(干货——写出文档方法一,采用Transformer)

Transformer t = TransformerFactory.newInstance().newTransformer();
t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
"http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd");
t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//W3C//DTD SVG 20000802//EN");
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.METHOD, "xml");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
t.transform(new DOMSource(doc), new StreamResult(Files.newOutputStream(file.toPath())));


3)另一种方式是使用 LSSerializer 接口, 为了获取实例, 可以使用下面 的魔咒:
(干货——写出文档方法二, 采用LSSerializer 接口)

DOMImplementation impl = doc.getImplementation();
DOMImplementationLS imlpLS = (DOMImplementationLS)impl.getFeature("LS", "3.0");
LSSerializer ser = implLS.createLSSerializer();
  • 3.1)如果需要空格和换行,可以设置下面的标志:
ser.getDomConfig().setParameter("format-pretty-print", true);
  • 3.2)然后可以很容易的将 文档转换为 字符串:
String str = ser.writeToString(doc);
  • 3.3)如果想要将输出直接写入到文件中, 则需要一个 LSOutput:
LSOutput out = imlpLS.createLSOutput();
out.setEncoding("UTF-8");
out.setByteStream(new FileOutputStream(new File(workDir + "generate2.xml")));
ser.write(doc, out);


【2】使用StAX 写 XML文档(要知道, DOM解析器是基于SAX解析器的, DOM解析器比较复杂)

1)我们看到, 如果通过写DOM树的方法来产生 XML文件, 如果这个 DOM 树没有其他任何用途, 那么这种方式就不是很高效;
2)StAX API 是我们直接将 XML 树写出, 这需要从某个 OutputStream 中构建一个XMLStreamWriter, 就像下面这样:

 XMLOutputFactory factory =  XMLOutputFactory.instance();
XMLStreamWriter writer = factory.createXMLStreamWriter(out);
  • 2.1)要产生XML 文件头, 需要调用
writer.writeStartDocument();
  • 2.2)然后调用
writer.writeStartElement(name);
  • 2.3)添加属性调用
writer.writeAttribute(name , value);

3)现在,可以通过再次调用 writeStartElement 添加新的子节点, 或者用下面 的语句写出字符:

writer.writerCharacters(text);
  • 3.1)再添加完所有子节点后, 调用
writer.writeEndElement(); 这会导致当前元素被关闭;
  • 3.2)要写出没有子节点的元素,可以使用下面的调用:
writer.writeEmptyElement(name);
  • 3.3)最后, 在文档的结尾,调用
writer.writeEndDocument(); 这个调用将关闭所有元素;

(for source code , please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter2/StAXParser)
for detailed StAX, please visit http://blog.csdn.net/pacosonswjtu/article/details/50569728
(相关文章转自(截图如下): http://www.journaldev.com/1240/java-xml-tutorial)
这里写图片描述


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 初探PLC 的ST 语言转换成C++ 的方法
    自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • linux qt打开常用文件格式,设置Linux Qt文件默认打开方式为QtCreator
    Linux自定义文件打开方式也可参照文本抱歉,本文前段时间写的ubuntu下的Qt工程文件默认打开方式是不好用的,因为其他的文本文件也会受到影响,强迫症患者,每次打开Qt工程都是先 ... [详细]
author-avatar
88943w
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有