DOM4J 性能最好的!被很多框架使用,参考dom4j的doc的快速入门,写得非常好!!!不需要老师了,不需要记,只需学会查文档!!去copy!
将dom4j.jar 加入class path
1 操作XML
class Test{
main(){
SAXReader read=new SAXReader();
1//修改已有的xml文件,获取根节点
Document doc=read.read(new FileInputStream(“”));
//获取根元素
Element root=doc.getRootElement();
2//创建xml文件,xml文件不存在,获取根节点
Document doc=DocmentHelper.createDocument();
//创建元素,并设置为根元素
Element root=DocumentHelper.createElement(“student”);
doc.setRootElement(root);
/此时也可以获取根元素
Element root=doc.getRootElement();
//设置节点属性
root.addAttribute(“name”,”s”);
//为节点添加子节点作为末节点
Element e1=root.addElemet(“hello”);
//指定位置插入子节点,先获得所有子节点集合,去修改集合 root.element ()获取第一个子节点
List list=root.elements();
Element eee=DocumentHelper.createElement(“eee”); 创建新元素
eee.setText(“ferf”); 节点添加文本内容
//在指定位置插入元素
list.add(3,eee);
e1.setText(“helloworld”); 节点添加文本
//删除节点:先获取该节点
Element child=doc.getRootElement().element(“书”) .element(“价格”);root.element ()获取第一个子节点
或者:
//获得所有子节点集合,并获得指定子节点
Element child=doc.getRootElements().get(1) .elements().get(1);
//获取其父节点,再删除
child.getParent().remove(child);
//输出xml,不加参数,默认后台输出
XMLWriter w=new XMLWriter();
w.write(doc);
//加参数,指定位置输出
XMLWriter w=new XMLWriter(new FileOutputStream(“sss.xml”));
w.write(doc);
//加参数,指定位置,指定格式输出,缩进用空格,true代表换行
OutputFormat f=new OutputFormat(“ ”,true);
XMLWriter w=new XMLWriter(new FileOutputStream(“sss.xml”),f); 从心输出文件
w.write(doc);
}}
DOM4J输出是乱码,乱码原因:
所谓编码;就是将String转化为二进制字节,或相反
XMLWriter w=new XMLWriter(new FileOutputStream(“sss.xml”),f);
真正底层是交给FileOutputStream编码,写入文件,默认使用本地编码:gb2312
但xml文档头指令<?xml version=”1.0” encoding=“utf-8”?>默认是utf-8,myeclipse打开时是按utf-8解码,就出错了!
1解决,让FileOutputStream写数据时,不去参照本地编码,而是utf-8
XMLWriter()可以接受Writer,OutputStream 类型,只需查看哪个子类可以执行编码方式:
XMLWriter w=
new XMLWriter(new OutputStreamWriter(new FileOutputStream(“sss.xml”):”utf-8”),f);
2解决,用格式化输出器,指定xml头指令编码:我们只想统一用utf-8!!
OutputFormat f= OutputFormat.createPrettyPrint();
f.setEncoding(“utf-8”); 指定xml头指令编码
XMLWriter w=
new XMLWriter(new OutputStreamWriter (“sss.xml”), f);
编码解码都是utf-8
2读XML
class Test2{
SAXReader read=new SAXReader();
Document doc=read.read(new FileInputStream(“”));
Element root=doc.getRootElement();
root.getName();
//获得子元素节点
List list=root.elements();
//获得指定名字的所有子元素节点
List list=root.elements(“hello”);
//获取第三个hello element
Element e=(Element)list.get(2);
//获得元素文本
e.getText();
//返回第一个子元素节点
Element e=root.element(“hello”);
//返回属性,也是Attribute类型
Attribute attr1=e.attribute(“name”);
String s=attr1.getValue();
或者合并为一步:
String s= e.attributeValue(“name”);
//返回元素所有属性集合
List list=e.attributes();
}
|