dom4j解析xml和创建xml文件

xml是扩展性的标记性语言,是用于两个程序之间数据通信,也可以用来存放数据,做一个小型的数据库等,xml广泛使用与项目开发中,我们可以把很多有用的内容保存在xml文件中,这样便于修改,方便,灵活。当我们想要取出保存在xml中的数据的时候,我们可以把它解析出来,便于我们使用,解析xml文件的方法有很多种,但dom4j是最灵活和最常用的一种方法,以后在hibernate中也经常使用,下面是解析xml文件的一个简单的实例:
一:一个简单的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<class>
<student id="hhh" name="kaka">
<name id ="tt" name="kak">周星星</name>
<age id="ttt">45</age>
<sex id="mao">男</sex>
</student>
<student id="aa">
<name id="kk">田小小</name>
<age id="nn">20</age>
<sex id="ll">男</sex>
</student>
<student id="55">
<name id="hha">小小</name>
<age id="kka">45</age>
<sex id="maomao">男</sex>
</student>

</class>
二:用dom4j解析出所有元素和属性:
package xml;

import java.io.File;
import java.util.*;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ReaderXml2 {

public void read() throws Exception {
//创建一个xml读取器
SAXReader reader = new SAXReader();
//读取文件
//路径,现在4。xml是直接放在项目的根目录下Document document = reader.read(new File("4.xml"));
//若不是放在根目录下,那么就要指定一个路径,避免出错
String path = this.getClass().getResource("/4.xml").getPath();
//Document是文档
Document document = reader.read(new File(path));
//获取根元素
Element element = document.getRootElement();
element(element);

}
//递归取出所有元素
public void element(Element element){
System.out.println("元素: "+element.getName());
//如果只是一个普通的元素没有子元素的,就直接输出
if(element.isTextOnly()==true){
System.out.println("元素 名称: "+element.getName()+"||||"+"元素内容:"+element.getText());
}else{
//如果里面还有字元素的,那么就把它里面的内容输出
List elements = element.elements();
int size = elements.size();
for(int i=0;i<size;i++){
Element emt = (Element)elements.get(i);
//System.out.println("元素:"+emt.getName());
//递归遍历出所有的元素
element(emt);
//某一个元素的所有属性列出来
arr(emt);
}
}
}
public void arr(Element element){
//取出所有的属性,放在list中
List att = element.attributes();
int size = att.size();
for(int i=0;i<size;i++){
//依次取出属性
Attribute attb = (Attribute)att.get(i);
//输出元素名称,属性名称和属性内容
System.out.println("元素名称"+element.getName()+" 属性名称:"+attb.getName()+"属性内容:"+attb.getValue());

}
}

public static void main(String[] args){

try {
new ReaderXml2().read();
} catch (Exception e){
e.printStackTrace();
}
}
}
三:用访问者模式快速读取xml文件:

下面这个xml是一个加载和连接Oracle数据库的xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<oracle>
<drivername>oracle.jdbc.driver.OracleDriver</drivername>
<url>jdbc:oracle:thin:@192.168.6.4:1521:orcl</url>
<dbname>scott</dbname>
</oracle>
编写访问者设计模式,读取该文件:
package xml;

import java.io.File;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;

import org.dom4j.VisitorSupport;
import org.dom4j.io.SAXReader;

public class Visitorreader {

public void load(String xmlfile){
SAXReader reader = new SAXReader();
String path = this.getClass().getResource(xmlfile).getPath();
try {
Document doc = reader.read(new File(path));
doc.accept(new Myvisitor());
} catch (DocumentException e) {

e.printStackTrace();
}
}
//访问者模式
class Myvisitor extends VisitorSupport{

@Override
public void visit(Attribute node) {
System.out.println("属性名称:"+node.getName()+"\t\t"+"属性内容:"+node.getValue());
}

@Override
public void visit(Element node) {

System.out.println("元素名称:"+node.getName()+"\t\t"+"元素内容:"+node.getText());
}

}
public static void main(String[] args){
new Visitorreader().load("/4.xml");
}

}

<dbpw>tiger</dbpw>
</oracle>
从上面的程序中我们可以看出,很简单,比第一个列子中的代码少了很多。而且这样的读取后,我们可以再编写一个连接数据库的工具类,把上面的读取方法直接加上去,就可以了,就避免了我们在使用工具类连接数据库的时候,由于服务器的不同而修改多次的代码,若要修改,我们直接修改xml文件,就可以很方面的解决,在此就不多加描述了

四。使用dom4j技术创建xml文件
package xml;

import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class CreateXml {

private void create(String xmlFileName){
//
DocumentFactory factory = new DocumentFactory();
Document document = factory.createDocument();
Element root = document.addElement("计算机图书");
for(int i=0;i<4;i++){
Element book = root.addElement("图书");
book.setText("Think in java"+i);
book.addAttribute("isdn","a"+Math.random()*100);
Element e = book.addElement("作者");
e.setText("田小小");
}
OutputFormat format = new OutputFormat(" ",true,"GBK");
try {
FileWriter fw = new FileWriter(xmlFileName);

XMLWriter writer = new XMLWriter(fw,format);
writer.write(document);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
public static void main(String[] args){
new CreateXml().create("book.xml");
}
}
这样的话,就生成了一个简单的xml文件如下所示:
<?xml version="1.0" encoding="GBK"?>

<计算机图书>
<图书 isdn="a10.253042872768658">Think in java0
<作者>田小小</作者>
</图书>
<图书 isdn="a25.008161429145538">Think in java1
<作者>田小小</作者>
</图书>
<图书 isdn="a87.98573091148226">Think in java2
<作者>田小小</作者>
</图书>
<图书 isdn="a9.459176830404992">Think in java3
<作者>田小小</作者>
</图书>
</计算机图书>
这些都是xml的简单应用,其实xml广泛应用于web开发中,在以后的编程中将会使用xml更多的知识!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值