JAVA学习笔记之(写入xml)

DOMf方式生成XML文件:

一、创建根节点和book节点属性
1,前两个步骤和解析XML文件一致,都是获取DocumentBuilder对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.getDocumentBuilder();
2,通过DocumentBuilder的newDocument方法获取Document对象,代表着要生成的DOM树
Document do = db.newDocument();
3,将根节点添加进DOM树
Element ele = do.createElement("bookStore");
document.appendChild(ele);
4,将子节点添加进DOM树
Element ele1 = document.createElement("book");
ele.appendChild(ele1)
5,将子节点的属性及属性值添加进DOM树
ele1.setAttribute("id","1");


二、创建xml文件

将DOM树转换成XML文件
1,创建TransformerFactory对象,Factory为工厂类,不能直接new对象,通过newInstance获取对象
TransformerFactory tff = TransformerFactory.newInstance();
2,通过tff获取Transfomer对象
Transformer tf = tff.newTransformer();
3,指定换行格式
tf.setOutputProperty(OutputKeys.INDENT,"yes");
4,用DOM树生成XML文件,将DOM树以及输出流作为参数传入
tf.transform(new DOMSource(Document do),new StreamResult(new File("books1.xml"));


三、生成结点间的文本

XML文件中第一行StandAlone表示该XML文件是否独立设置为yes为默认值,且不显示,表示独立没有外部文件为其服务,设置为no表示外部有其他文件为其服务
new Document().setXmlStandalone("yes");
生成XML文件子节点的文本内容
1,将子节点添加进DOM树
Element ele2 = new Element("name");
ele1.append(ele2);
2, 设置子节点的文本内容
ele2.setTextContent("String");



SAX方式生成XML文件:

使用SAX生成XML的准备工作
1,创建SAXTransformerFactory对象,工厂类不能直接new对象
SAXTransformerFactory stf = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
2,创建TransformerHandler对象,用于XML文件节点以及内容的编写
TransformerHandler th = stf.newTransformerHandler();
3,创建Transformer对象,用于对生成的XML文件的格式以及编码的设置
Transformer tr = th.getTransformer();
4,通过Transformer对象对XML文件的编码以及换行进行设置
tr.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
tr.setOutputProperty(OutputKeys.INDENT,"yes");
5,创建一个流对象供result对象使用
File file = new File("xxxx");
6,创建Result对象,作为XML的文件输出流
Result result = new StreamResult(new FileOutputStream(file));
7,将输出流对象与编写XML文件内容的TransformerHandler对象联系起来
th.setResult(result);


使用SAX生成XML文件中的节点以及节点属性
1,打开Document
handler.startDocument();
2,创建属性对象
AttributesiImpl ai = new AttributesImpl();
3,创建无属性节点
handler.startElement("","","bookStore","ai");
4,创建有属性节点
ai.clear();(清除原有属性内容)
ai.addAttribute("","","id","","1");(设置新的属性内容)
handler.startElement("","","book","ai");
5,结束节点
handler.endElement();
6,结束Document
handler.endDocument();


通过SAX生成XML文件的节点步骤
先生成外围节点在外围节点的startElement和endElement中间生成子节点
分两种情况:
1,有属性的节点
(1)创建属性对象,并设置属性名以及属性值
AttributesImpl ai =new AttributesImpl();
ai.addAttribute(null,null,name,null,value);
(2)创建节点
handler.startElement(null,null,name,ai)
(3)添加节点内容(若无内容则不用进行这一步)
handler.characters(String.toCharArray(),int,int);
(4)结束节点
handler.endElement(null,null,name);
2,无属性的节点
(1)清空属性对象
ai.clear();
(2)创建节点
handler.startElement(null,null,name,ai)
(3)添加节点内容(若无内容则不用进行这一步)
handler.characters(String.toCharArray(),int,int);
(4)结束节点
handler.endElement(null,null,name);


DOM4J生成xml:

RSS格式的xml文件:RSS文件通常是用来描述和同步网站内容的一种格式,其本质是xml文件。
xml文件存在的目的:通常是用来共享数据。


使用DOM4J创建XML文件中rss根节点步骤
1,创建Document对象,代表着整个XML文档
Document do = DocumentHelper.createDocument();
2,创建根节点rss
Element rss = do.addElement("rss");
3,向rss根节点中添加version属性
rss.addAttribute("version","2.0");
4,创建XML文档的输出流
File file = new File("xxx");
XMLWriter writer = new XMLWriter(new FileOutputStream(file));
5,将程序所写的XML文档内容与输出流联系起来
writer.write(do);
6,关闭资源
writer.close();


使用DOM4J生成XML文件中节点以及节点内容的步骤
1,使用根节点对象得到子节点对象
Element ele1 = ele.addElement("String");
2,设置子节点文本内容
ele1.setText("String");
3,设置生成的XML文档的格式
OutputFormat format = OutputFormat.creatPrettyPrint();
这个format对象默认为标准格式,需要其他格式可以调用该对象的其他方法如:
format.setEncoding("GBK");
4,将设置同步到XML文档
Writer write = new Writer(new FileOutputStream(file),format);

5.通过Writer类的对象调用setEscapeText()方法设置不转义
write.setEscapeText(false);



通过JDOM方式生成XML文件

一、JDOM生成XML根节点
1,创建一个根节点,并设置属性以及属性值
Element ele = new Element("rss");
ele.setAttribute("version","2.0");
2,创建Document对象,并将Element对象传入进去
Document do = new Document(ele);
(有了文档之后就考虑如何将文档与要生成的XML文件联系起来,每种解析方式都提供了相应的输出流,原理都是通过一个方法将输出流与Document对象联系起来)
3,创建输出流对象
XMLOutputter outputer = new XMLOutputter(format);
outputer.output(do,new FileOutputStream(new File("xxx")));


二、添加子节点及节点间文本

通过JDOM方式生成子节点以及节点间的文本
将子节点添加进上一级节点
ELement ele1 = new Element("title");
ele.addContent(ele1);
设置节点间的文本
ele1.setText("国内最新新闻");

title.addContent(new CDATA("<国内最新新闻>"));这样子可以处理特殊字符


三、JDOM设置XML格式

1,创建Format对象
Format format = Format.getCompactFormat();
2,设置换行以及编码
format.setIndent("");
format.setEncoding("GBK");
3将Format对象作为参数传进输出流创建方法中
XMLOutputter outputer = new XMLOutputter(format);



PS:四种方式的比较:

假设我现在要生成一个xml。让它去存储书籍信息。首先写根节点bookstore,然后添加第一本书,然后添加第二本书,这时候发现第一本书中有某一个内容忘记添加了,想回去进行修改或增加。这时候我们发现SAX解析是无法做到这一点的,因为SAX解析是基于事件的。基于事件的模型呢,把某一个标签走完了之后,它是不能走回头路的,它没有状态性可言。所以在使用DOM还是SAX进行选择时,要考虑到你是不是要对生成的模型进行频繁的修改。如果不是呢,建议选用SAX,因为SAX的性能也是非常高的。说到性能呢。衡量性能的重要指标之一呢,就是生成的速率。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值