| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package UIB.COM;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
- import org.w3c.dom.NodeList;
- /**
- *
- * @desc 对具体指定的XML文件进行解析,获取SQL及对应ID。
- * xml文档解析,服务器启动时执行,循环读取XML文件,并逐一将SQL解析出来并按照key-value的形式存放在hashmap中
- * @author meiguiping
- * @date 2010 12:38:36 PM
- */
- public class XgDomParser implements IXMLParser
- {
-
-
-
- /**
- * @desc 加载XML文件
- * @param element
- * @param sqlID
- * @return
- */
- public HashMap parserEl(Element element)
- {
- if(element == null)
- {
- System.out.println("XML文件获取失败!");
- return null;
- }
- //解析xml
- HashMap hm = loadElement(element);
- return hm;
- }
-
- /**
- * @desc 废弃
- * @deprecated
- */
- public HashMap parserSq(Element element , String sqlID)
- {
- if(element == null)
- {
- System.out.println("XML文件获取失败!");
- return null;
- }
- else if("".equals(sqlID.trim()))
- {
- System.out.println("sqlID为空!");
- return null;
- }
- HashMap hm = loadSqlID(element, sqlID);
- return hm;
- }
-
- /**
- * @desc 解析XML文件,获取所有SQL,按照KEY-VALUE的形式存放
- * @param element
- * @return
- */
- private HashMap loadElement(Element element)
- {
- HashMap hashmap = new HashMap();
- String reg="--[\\w\\W]+?\n";
- if (element.hasChildNodes())
- {
- NodeList nodelist = element.getChildNodes();
- int j = nodelist.getLength();
- for(int i = 0 ; i< j; i++)
- {
- Node node = nodelist.item(i);
-
- if(node.getNodeType() == Node.CDATA_SECTION_NODE) //CDATA段
- {
- String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
- if(!"".equals(node.getNodeValue().trim()))//可不判断
- hashmap.put(sqlid, node.getNodeValue().trim().replaceAll(reg, ""));
- continue;
- }
-
- if(node.getNodeType() == Node.TEXT_NODE)//TEXT
- {
- if(node.getParentNode().getAttributes().getNamedItem("id") == null)
- continue;
- String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
- if(!"".equals(node.getNodeValue().trim()))//必须判断
- hashmap.put(sqlid, node.getNodeValue().trim().replaceAll(reg, ""));
- continue;
- }
-
- if(node.getNodeType()==Node.ELEMENT_NODE)//ELEMENT
- {
- Element e = (Element)nodelist.item(i);
- Map map = loadElement(e);
- if(map.size() > 0)
- {
- Iterator it = map.keySet().iterator();
- while(it.hasNext())
- {
- Object key = it.next();
- Object value = map.get(key);
- hashmap.put(key , value);
- }
- }
- }
- }
- }
- return hashmap;
- }
-
- /**
- * @desc 每次执行均需从磁盘读取,废弃
- * @param element
- * @param sqlID
- * @deprecated
- * @return
- */
- private HashMap loadSqlID(Element element , String sqlID)
- {
- HashMap hashmap = new HashMap();
-
- if (element.hasChildNodes())
- {
- NodeList nodelist = element.getChildNodes();
- int j = nodelist.getLength();
- for(int i = 0 ; i< j; i++)
- {
- Node node = nodelist.item(i);
-
- if(node.getNodeType() == Node.CDATA_SECTION_NODE) //CDATA段
- {
- String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
- if(sqlid.equals(sqlID))
- {
- if(!"".equals(node.getNodeValue().trim()))//可不判断
- hashmap.put(sqlid, node.getNodeValue().trim());
- continue;
- }
- }
-
- if(node.getNodeType() == Node.TEXT_NODE)//TEXT
- {
- if(node.getParentNode().getAttributes().getNamedItem("id") == null)
- continue;
- String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
- if(sqlid.equals(sqlID))
- {
- if(!"".equals(node.getNodeValue().trim()))//必须判断
- hashmap.put(sqlid, node.getNodeValue().trim());
- continue;
- }
- }
-
- if(node.getNodeType()==Node.ELEMENT_NODE)//ELEMENT
- {
- Element e = (Element)nodelist.item(i);
- Map map = loadSqlID(e , sqlID);
- if(map.size() > 0) hashmap.put(sqlID , map.get(sqlID));
- }
- }
- }
- return hashmap;
- }
- }
|