用Dom4j解析XML文档
用java从XML文档中读取数据的例子网上已经很多了,大概有4种,dom,sax,jdom,dom4j
我选择了dom4j,下面是我的例子,及一些看法和问题。
首先是要读取的xml文件,名子为:sql.xml。内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<pp>
<module id="oo">
<sql id="id1">
select * from aa $:aa where aa=:aa}
</sql>
<sql id="id2">
select aa from aa where aa is not null and (aa=1 or bb=2) and substr(aaed,0,3) = :dd
</sql>
<sql id="id3">
SQL3
</sql>
<sql id="id4"><![CDATA[
SQL4
]]></sql>
<sql id="id5"><![CDATA[
select t.aa,t.bb,t.cc,t.dd,t.ee,t.ff
from AA t
where t.aa =:dd
order by t.aa,t.bb
]]></sql>
<sql id="id6"><![CDATA[
select dd from ff where ss='ff' and ff='ff' and ee=:gg
]]></sql>
<sql id="id7"><![CDATA[
SELECT usename FROM Login WHERE useid= ? and password= ?
]]></sql>
</module>
<module id="qq">
<sql id="id8"><![CDATA[
DELETE FROM dd WHERE ff in(:dd[split as array])
]]></sql>
<sql id="id9"><![CDATA[
Select code, decode(code,'qqqqqq','成功','不成功') name from aa where dd = '3333'
]]></sql>
<sql id="id10"><![CDATA[
SQL10
]]></sql>
</module>
</pp>
文档结构为,一个PP根结点,下有两个子结点(即2个module)每个module下有若干个sql(由于是例子,所以隐去表名及字段)
想实现的功能:只要提供一个sqlid 就能得到对应的sql语句。
import java.io.File;
import java.util.Iterator;
import java.util.LinkedHashMap;
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;
public class Dom4jPaserTest <