现在xml已异常的流行,所以为了跟上趋势,我也学习使用了xml。
这是我使用dom4j进行解析xml文档的一段代码:(ide工具:myeclipse)
<?xml version="1.0" encoding="utf-8"?>
<resource>
<sql id="one">
<sql-content>a</sql-content><!-- 这个就是sql/hql语句的内容 -->
<alias>b</alias><!-- 这个如果是hql语句的列的别名 -->
<type>c</type><!-- 这个是别名对应的hibernate类型 -->
<pageSize>d</pageSize><!-- 如果有分页,这个是分页大小 -->
</sql>
<sql id="two">
<sql-content>x</sql-content><!-- 这个就是sql/hql语句的内容 -->
<alias>t</alias><!-- 这个如果是hql语句的列的别名 -->
<type>2</type><!-- 这个是别名对应的hibernate类型 -->
<pageSize>2</pageSize><!-- 如果有分页,这个是分页大小 -->
</sql>
</resource>
这个是我举例使用的xml文件
import java.io.InputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.tax.exception.NullResultException;
/**
* 这里要注意的此xml文档的根会签必须是:resource<br>
* 而此xml文档的根标签只可以为:sql,当然文档中sql的个数不限,可以没有,也可以有多个,而且此标签有一个必须的唯一属性id
* 这里是解析xml文件的内容,最后返回的结果是<sql>内所有的内容,将并它存在map中,标签名是对应的key<br>
* 而key对应的值也就是其标签的内容
* @author 张尊伟
*
*/
public class ParseXML implements Serializable {
private static Document document = null;
private static Element rootElement = null;
private static Map map = new HashMap();
private ParseXML() throws NullResultException {
SAXReader reader = new SAXReader();
try {
InputStream is =ParseXML.class.getResourceAsStream("/resources.xml");
document = reader.read(is);
rootElement = document.getRootElement();
} catch (DocumentException e) {
throw new NullResultException("提供的资源文件不存在或者解析文件错误!",e);
}
}
public static ParseXML getInstance() throws NullResultException{
final String INSTANCE = "com.tax.util.ParseXML";
ParseXML px = (ParseXML) map.get(INSTANCE);
if(px == null){
px = new ParseXML();
map.put(INSTANCE,px);
}
return px;
}
/**
* 这里返回dom4j的document对象
* @return org.dom4j.Document
*/
public Document getDocument() {
return document;
}
/**
* 返回引xml文档的根标签
* @return
*/
public Element getRootElement() {
return rootElement;
}
/**
* 这里根据<sql>标签的id属性行到此标签的所有子标签的值<br>
* 返回的结果是<sql>内所有的内容,将并它存在map中,标签名是对应的key<br>
* 而key对应的值也就是其标签的内容<br>
* @param idValue
* @return
*/
public Map getValue(String idValue){
Map map = new HashMap();
List list = document.selectNodes("
/resource/sql/@id
");
Iterator it = list.iterator();
while(it.hasNext()){
Attribute attribute = (Attribute) it.next();
if(!attribute.getValue().equals(idValue)){
continue;
}
Iterator it0 = attribute.getParent().elementIterator();
Element el = null;
while(it0.hasNext()){
el = (Element) it0.next();
map.put(el.getName(),el.getData());
}
break;
}
return map;
}
/*
public static void main(String []args){
ParseXML px = null;
try {
px = ParseXML.getInstance();
} catch (NullResultException e) {
// TODO 自动生成 catch 块
System.out.println(e.getException().getMessage());
}
Map map = px.getValue("one");
System.out.println(map.get("alias"));
}*/
}