`

利用dom4j解析xml文档

    博客分类:
  • XML
阅读更多
现在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"));
}*/
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics