JavaEE XML DOM创建
DOM创建XML
@author ixenos
1、思路:
先封装构建一颗DOM树,然后将DOM树转换成XML文件
2、三种写DOM树到XML文件的方式:
1)使用DOM(或DOM4J、JDOM)
2)使用LSSerializer接口
3)使用XSLT(Extensible StyleSheet Language Transformations)可扩展的格式页转换,XSL转换
3、构建一颗DOM树
1)不带名称空间
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
//创建标签节点
Element rootElement = doc.createElement(rootName);
Element childElement = doc.createElement(childName);
//创建文本节点
Text textNode = doc.createTextNode(textContents);
//给文档添加根元素,给父节点添加子节点
doc.appendChild(rootElement);
rootElement.appendChild(childElement);
childElement.appendChild(textNode); //添加文本节点
//设置元素属性
rootElement.setAttribute(name, value);
2)带名称空间
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
//然后使用createElementNS而不是createElement来创建节点
String namespace = http://www.w3c.org/2000/svg;
Element rootElement = doc.createElementNS(namespace, “svg”); //svg标签名
//如果节点具有命名空间前缀,则xmlns前缀属性会被自动创建
Element svgElement = doc.createElementNS(namespace, “svg:svg”); //svg前缀
当该元素被写入XML文件时,它会转变为:
<svg:svg xmlns:svg=”http://www.w3c.org/2000/svg”>
//元素属性有名称空间
rootElement.setAttributeNS(namespace, qualifiedName, value);
//DOM4J
//1.创建document对象,代表整个xml文档
Document document = DocumentHelper.createDocument();
//2.创建根节点rss
Element rss = document.addElement("rss");
//3.向rss节点中添加version属性
rss.addAttribute("version", "2.0");
//4.生成子节点及节点内容
Element channel = rss.addElement("channel");
Element title = channel.addElement("title");
title.setText("<![CDATA[上海移动互联网产业促进中心正式揭牌 ]]>");
4、写出树的内容到XML
1)DOM原生
//不对DOM树做任何修改的转换器
Transformer t =TransformerFactory.newInstance().newTransformer();
//为了将DOCTYPE节点纳入输出,还需将SYSTEM和PUBLIC标识符设置为输出属性
t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, systemIdentifier);
t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,publicIdentifier);
//设置缩进规则
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(new FileOutputStream(file)));
//DOM4J
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
// 生成xml文件
File file = new File("rssnews.xml");
XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
//设置是否转义,默认值是true,代表转义
writer.setEscapeText(false);
writer.write(document);
writer.close();
2)使用LSSerializer接口
//获取LSSerializer
DOMImplementation impl = doc.getImplementation();
DOMImplementationLS implLS = (DOMImplementationLS)impl.getFeature(“LS”,”3.0”);
LSSerializer ser = implLS.createLSSerializer();
//需要空格和换行,设置
ser.getDomConfig().setParameter(“format-pretty-print”, true);
//可以将XML文档转换为字符串
String str = ser.writeToString(doc);
//如果想将输出直接写入文件中,需要一个LSOutput
LSOutput out = implLS.createLSOutput();
out.setEncoding(“UTF-8”);
out.setByteStream(Files.newOutputStream(path)); //指定输出到哪个文件,不存在就创建
ser.write(doc, out);
3)使用XSLT转换
XSL转换机制可以指定将XML文档转换为其他格式的规则,例如,txt纯文本、XHTML或其他任何XML格式。
用途:
XSLT通常用来将某种机器可读的XML格式转译为另一种机器可读的XML格式,或者将XML转译为适合人类阅读的表示格式
步骤:
1、 需要提供XSLT样式表,它描述了XML文档向某种格式转换的规则
2、 XSLT处理器读入XML文档和XSLT样式表,产生所要的输出
XSLT样式表:
<?xml version=”1.0” encoding=”utf-8”?>
<xsl:stylesheet
Xmlns:xsl=http://www.w3c.org/1999/XSL/Transform
Version=”1.0”>
<xsl:output method=”html”/> //指定输出的格式为HTML,其他有XML、text
Template1 模板
.
.
.
Template2
</xsl:stylesheet>
模板示例:
<xsl:template match=”/staf/employee”>
<tr><xsl:apply-templates/></tr>
</xsl:template>
match属性的值是一个XPath表达式
该模板表示:每当看懂啊XPath集/staff/employee中的一个节点时
(1) 产生字符串<tr>
(2) 对于要处理的子元素继续应用模板(会递归!)
(3) 当处理完所有所有子元素后,产生字符串</tr>
把属性值复制到输出中的模板:
<xsl:template match=”/staff/employee/hiredate”>
<td><xsl:value-of select=”@year”/>-<xsl:value-of select=”@month”/>-<xsl:value-of select=”@day”/></td>
</xsl:template>
这里xsl:value-of语句用于计算,由select的XPath值指定的节点集(属性节点)的,字符串值
XML转HTML示例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html"/> //指定输出为html格式
<xsl:template match="/staff"> //使用XPath来分别定位
<table border="1"><xsl:apply-templates/></table>
</xsl:template>
<xsl:template match="/staff/employee"> //使用XPath来分别定位
<tr><xsl:apply-templates/></tr>
</xsl:template>
<xsl:template match="/staff/employee/name"> //使用XPath来分别定位
<td><xsl:apply-templates/></td>
</xsl:template>
<xsl:template match="/staff/employee/salary"> //使用XPath来分别定位
<td>$<xsl:apply-templates/></td>
</xsl:template>
<xsl:template match="/staff/employee/hiredate"> //使用XPath来分别定位
<td><xsl:value-of select="@year"/>-<xsl:value-of
select="@month"/>-<xsl:value-of select="@day"/></td>
</xsl:template>
</xsl:stylesheet>
Java平台下的XSL转换(XSLT):
(1)为每个样式表设置一个转换器工厂,得到一个转换器对象,并让它把一个源转换成结果
File styleSheet = new File(fileName); //某个xsl文件
StreamSource styleSource = new StreamSource(styleSheet);
Transformer t = TransformerFactory.newInstance().newTransformer(styleSource);
t.transform(source, result);
(2)谈谈source和 result
Source接口有四个实现类:DOMSource、SAXSource、StAXSource、StreamSource,这些类使我们能通过文件、流、Reader、URL、DOM树节点来传入一个source
比如:来自DOM树节点的DOMSource(传入Document就相当于整个树)、
Result接口有三个实现类:DOMResult、SAXResult、StreamResult
如果要把转换结果存储到DOM树中,那就再创建一个新的文档节点包装到DOMResult中:
Document doc = builder.newDocument();
t.transform(source, new DOMResult(doc));
如果要把转换结果保存到文件中,可以使用StreamResult
t.transform(source, new StreamResult(file));
JavaEE XML DOM创建的更多相关文章
- JavaEE XML DOM创建之DOM4J
DOM4J创建xml文档 @author ixenos 1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt ...
- JavaEE XML DOM解析之DOM4J
DOM解析之DOM4J @author ixenos DOM4J常用API 读取xml文档: Document doc = new SAXReader().read("xml文件" ...
- JavaEE XML StAX创建
StAX创建XML文档 @author ixenos 1. 如果通过DOM树来创建XML文件时,发现这个DOM树没有其他用途,那么这种方式就不是很高效,这时我们可以使用StAX API直接将XML树写 ...
- JavaEE XML DOM解析
DOM解析XML @author ixenos XML解析方式(原理) a) DOM 解析树 b) SAX 流事件 DOM解析对应主流工具 i. DOM(官方) i ...
- PHP中利用DOM创建xml文档
DOM创建xml文档 用dom创建如下文档: <booklist> <book id="1"> <title>天龙八部</title> ...
- 使用DOM创建xml文件
使用DOM创建xml文件 创建xml的代码如下: public class CreateXML { public static void main(String[] args) { DocumentB ...
- php XML 读写 创建
一 .XML 读 1.1. 首先同目录定义好一个XML文件 : book.xml <?xml version="1.0" encoding="utf-8" ...
- htm Dom对象与 Xml Dom对象的理解
html 是基于Xml的文档规范.是一种特殊的xml文档,这一点很重要 1.xml 文档的操作,java,c#,...各种语言都提供了很好的api对文档进行解析,操作.当然js 也不例外,提供了一系列 ...
- python 解析XML python模块xml.dom解析xml实例代码
分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...
随机推荐
- 介绍一款基于jquery好用的编辑框htmlbox.full.js
1. 可选择背景颜色,自主选择工具,感觉挺好用的,不过需要注意,添加引用后找不到工具图标的图片,找到脚本修改idir:属性改成自己的图片文件夹存放路径即可. asp.net mvc3提交内容报错提示含 ...
- Varnish缓存服务
Varnish缓存服务详解及应用实现 1.varnish的基本介绍 Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已 ...
- JS事件调试
JS事件调试 - 查找HTML元素绑定的事件以及绑定代码所在位置 日常的网页开发调试工作中,经常需要知道指定的某个网页元素绑定了哪些事件以及绑定代码的位置,下面介绍三种用来跟踪页面中的事件的方法. ...
- ASP.Net页面传值比较
ASP.Net页面传值比较 作为一个ASP.Net程序员,尤其是搞B/S开发的,对于不同页面之间变量值的传递用的非常广泛,而掌握不同方式之间的区别和特点也就很有必要.本文将针对这一知识点做一个简单 ...
- c#中关于sealed修饰类的性能提升的测试
在clr var c#一书中,作者描述当用sealed修饰类时,可以提高系统性能而且建议大家也养成用sealed来修饰类的习惯.由于对性能二字比较敏感,所以本文先测试一下用sealed分别修饰和不修饰 ...
- Swift之函数语法详解
函数 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被“调用”. Swift 统一的函数语法足够灵活,可以用来表示任何函数 ...
- asp.net打印网页后自动关闭网页【无需插件】
项目遇需要网页加载自动打印网页后需要自动关闭该网页,但是百度了好久发现都是需要插件什么的 于是就自己摸索摸索,用js弄了个定时器,意外的发现,当打印设置窗口弹出后,定时器就暂停了 不管你点击取消或者打 ...
- AgileEAS.NET SOA中间件平台/敏捷软件开发平台
AgileEAS.NET SOA中间件平台/敏捷软件开发平台 最新下载 一.前言 AgileEAS.NET SOA中间件平台,简称EAS.NET,是基于敏捷并行开发思想和Microsoft .Net构 ...
- 算法打基础——HashTable
这一节主要讲很多方面非常重要的hash table等问题. 由于平时很少用到这些,基本都忘了... 怎样快速的在内存中插入.删除.和搜索呢? 这就需要哈希表了 这一节主要知识点是:1 简单的映射表和处 ...
- 开源框架Caliburn.Micro
Caliburn.Micro学习笔记----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeple ...