XML——写出XML文档(XSLT+StAX)
来源:互联网 发布:java 并发控制 编辑:程序博客网 时间:2024/04/27 23:54
【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文档(XSLT+StAX)
- Stax处理XML(三)——XPath的使用和写文档、修改文档
- stax方式解析xml文档
- XML-----StAX
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
- 技巧: 使用 StAX 合并 XML 文档
- Java处理XML文档的StAX方式
- Java解析xml文档之STAX解析
- SAX和STAX解析xml文档
- XML之StAX(一)
- XML之StAX(二)
- XML——StAX Streaming API for XML(read+write)
- 写出内容到xml文档
- Stax处理XML(一)——基于光标的查找
- xslt+xml
- xml & xslt
- XML+XSLT
- XML XSLT
- [游戏记录]滚动的天空
- mysql执行show processlist unauthenticated user 解决方法
- Erlang启动过程分析
- iptables配置FTP服务
- 【C++】 一维数组的初始化
- XML——写出XML文档(XSLT+StAX)
- 234,SDWebImage的使用
- aptitude
- 申请邓白氏码
- the path to become a better android developer is starting up
- How to overlay an icon over existing shell objects
- CSU 1228 ACM小组的数字游戏
- Android Studio视频教程——Android Studio Essential Training
- Apktool反编译错误问题解决方法