=======xml文件读写========
1、什么是xml?
Extensible markyup language:
可扩展性标记语言。
不是语言,w3c退出的一款全新的数据交互格式。
-----JSON。
responseText---responseXML
只不过特征继承了类似于HMTL标记语言的特征。
用户可自定义标签--同时还必须给标签样式和属性。
XHTML---全部是小写。
通俗的说:xml数据交互文件被广泛的使用在各个地方。
不依赖于系统和硬件。
2、意义?
无与伦比的通用性。
主要功能:用户数据交互。
java stu---JSON--XML-->c,c++
XML:自身提供了解析xml的多种方式。
用于数据显示:
用于数据持久化:
userInfo("1","admin","1")
<users>
<user id="1" name="admin">1</user>
<user id="2" name="admin1">2</user>
</users>
<users>
<id>1001</id>
<name>admin</name>
</users>
2.什么是?
Iterators:迭代器
xml 可扩展 标记语言
3、怎么用?
1、dom解析---内存开销大,支持回溯。
2、sax解析---不支持回溯,性能也不是很好。
p...
3、dom4j解析---好用,免费,语法同一,简单。
综合性能释放最好的。
public class test01{
public static void main(String[] args){
/**
*解析xml
*/
try{
File src = new File("c:\x\users.xml");
//a.创建SAXReader
SAXReander reader = new SAXReader();
//b.得到document对象(读取文件)
//reader.setEncoding("UTF-8");
Document doc= reader.read(src);
//c.得到根元素(得到xml文件下的根目录)
Element root =doc.getRootElenment();
//d.得到包含子元素的集合
List<Element>eles =root.elements();
//e.遍历集合,得到每个元素
for(Element element:eles){
// Attribute attrname = ele.attribute("name");
//String vauename = attrname.getValue();
// System.out.println(valuename);
System.out.println(element.attributeValue("id"));
System.out.println(element.attributeValue("name"));
System.out.println(element.getText());
}
}catch(Elenment e){
e.printStackTrace();
}
}
}
public class test02{
public static void main(String[] args){
/**
*写入xml
*/
try{
//a.创建document文档
Document doc = DocumentHelper.crearteDocument();
//b.创建根元素
Element root = doc.addElement("stus");
//c.为根元素添加子元素(属性、内容)
// Element stu1= root.addElement("stus")
// .addAttribute("id","xwz");
// .addAttribute("name","小丸子");
// .addAttribute("喜欢爷爷");
Element stu1= root.addElement("stus");
stu1.addAttribute("id","xwz");
stu1.addAttribute("name","小丸子");
stu1.addAttribute("喜欢爷爷");
Element stu2= root.addElement("stus");
stu2.addAttribute("id","xy");
stu2.addAttribute("name","小玉");
stu2.addAttribute("喜欢花轮");
//d.利用xmlwriter将doc写入磁盘
OutputStream out = new FileOutStream("c:\x\stus.xml");
//e.创建文档的储存格式
OutputFormat format = OutputFormat.createPrettyPrint();
//f.设置保存的编码集
format.setEnconding("GBK");
XMLwriter writer = new XMLWriter(out,format);
//g.写入
wirter.writer(doc);
wirter.flush();
wirter.close();
}catch(Elenment e){
e.printStackTrace();
}
}
}
xml的增删改查
pulic class XMLParse{
private static File file=new File("C:\aa\student.xml");
/**
* xml数据的增加
*/
public void add(Student stu){
//读取文档
Document doc = new ParseXML().reader(file);
Element root = doc.getRootElement();
Element stu1 = root.addElement("student");
stu1.addAttribute("id",stu.getId());
stu2.addAttribute("name",stu.getName()).
stu1.setText(stu.getPwd());
new ParseXML().xmlwriter(file,doc);
}
/**
* xml数据的修改
*/
public void upd(Student stu){
//读取文档
Document doc = new ParseXML().reader(file);
Element root = doc.getRootElement();
List<Element> element = root.elements();
for(int i = 0;i<element.size();i++){
if(elememts.get(i).attributeValue("id").equals(stu.getId())){
elememts.get(i).attribute("name").setValue("徐晃");
}
}
new ParseXML().xmlwriter(file,doc);
}
/**
* xml数据的删除
*/
public void del(Student stu){
//读取文档
Document doc = new ParseXML().reader(file);
Element root = doc.getRootElement();
List<Element> element = root.elements();
for(int i = 0;i<element.size();i++){
if(elememts.get(i).attributeValue("id").equals(stu.getId())){
elememts.remove(i);
}
}
new ParseXML().xmlwriter(file,doc);
}
/**
*测试
*/
public static void main(String[] args){
Student stu = new Student("1001","索尼");
add(stu);
upd(stu);
}
}
/**
*创建工具类
*/
public class ParseXML{
//读取数据
public Document reader(File file){
InputStream is = null;
Document doc = null;
try{
is = new FileInputStream(file);
SAZReader reader new SAXReader();
doc = new reader.read(is);
}catch(FileNotFoundException e){
e.printStackTrace();
}
return doc;
}
//保存
public void xmlwriter(File file,Document doc){
OutputStream out=null;
OutoutFormat format=null;
XMLwriter writer=null;
out = new FileOutStream("c:\x\stus.xml");
//e.创建文档的储存格式
format = OutputFormat.createPrettyPrint();
//e.设置保存的编码集
format.setEnconding("GBK");
try{
writer = new XMLWriter(out,format);
}catch(FileNotFoundException e){
e.printStackTrace();
}
//f.写入
try{
wirter.writer(doc);
wirter.flush();
wirter.close();
out.close();
}catch(Elenment e){
e.printStackTrace();
}
}
}
DOM和SAX解析的区别
1、操作有区别: DOM将所有文件读取到内存中形成DOM树,如果文件量过大,则无法使用
SAX顺序读入所需要的文件内容,不会一次性全部读取,不受文件大小的限制
2 访问限制有区别: DOM树在内存中形成,可以随意存放或读取文件树的任何部分,没有次数限制
SAX由于采用部分读取,只能对文件按顺序从头到尾读取XML文件内容,但不能修改
3 修改有区别: DOM可以任意修改文件树
SAX只能读取XML文件内容,但不能修改
4 复杂度有区别:DOM 易于理解,易于开发
SAX开发上比较复杂,需要用户自定义事件处理器
5 对象模型有区别: DOM 系统为使用者自动建立DOM树,XML对象模型由系统提供
SAX 对开发人员更加灵活,可以用SAX建立自己的XML对象模型
DOM 简介:
DOM 对于 XML 的处理方式就是把整个 XML 读到内存中形成一棵树状结构,
然后用各种方法对这棵数进行遍历、插入、删除、修剪等操作。因为 DOM
是 W3C 的正式标准,所有的语言都有支持 DOM 的解析器,包括 Java、C/C++、Perl、
JavaScript 等等。DOM 的优点是信息量丰富(全部都在内存中),而且可以随机访问,
尤其是在处理前后相互关联的元素时非常方便。DOM 的缺点是 XML 应用程序在处理 XML
之前必须先由 XML 解析器把整个 XML 读进内存并生成树状结构,如果 XML 非常大,
例如 10M,解析的过程是非常慢的。如果再加上 XSLT 转换(这是一种必须要使用 DOM 的操作)
这类同样耗费资源的操作,可能会耗尽系统的内存资源。所以标准 DOM 只适合于中小型 XML 的处理。
SAX 简介:
为了更好地解决大型 XML 处理的问题,Java 开发人员发明了 SAX。SAX 采用事件驱动的方式来处理 XML,它
的处理方式是:为每一个元素、属性、内容(这些都认为是事件)定义一个回调方法,这个回调方法由应用程
序提供。解析器以数据流的方式读入 XML,当遇到某个元素、属性、内容时就调用相应的回调方法。SAX 的优
点是处理效率高,适合处理大型 XML。缺点是 SAX 对 XML 是只读的,不能够对 XML 进行写操作,而且 SAX
处理 XML 中前后相互关联的元素时也没有 DOM 方便,因为应用程序必须自己保留以前事件的状态信息。但是
SAX 还是取得了巨大的成功,后来 SAX 还被移植到了 C++ 等语言中。