f72853d731a84c1cfe54b4890aaa1a631874b96f.svn-base 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package UIB.COM;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import org.w3c.dom.Element;
  6. import org.w3c.dom.Node;
  7. import org.w3c.dom.NodeList;
  8. /**
  9. *
  10. * @desc 对具体指定的XML文件进行解析,获取SQL及对应ID。
  11. * xml文档解析,服务器启动时执行,循环读取XML文件,并逐一将SQL解析出来并按照key-value的形式存放在hashmap中
  12. * @author meiguiping
  13. * @date 2010 12:38:36 PM
  14. */
  15. public class XgDomParser implements IXMLParser
  16. {
  17. /**
  18. * @desc 加载XML文件
  19. * @param element
  20. * @param sqlID
  21. * @return
  22. */
  23. public HashMap parserEl(Element element)
  24. {
  25. if(element == null)
  26. {
  27. System.out.println("XML文件获取失败!");
  28. return null;
  29. }
  30. //解析xml
  31. HashMap hm = loadElement(element);
  32. return hm;
  33. }
  34. /**
  35. * @desc 废弃
  36. * @deprecated
  37. */
  38. public HashMap parserSq(Element element , String sqlID)
  39. {
  40. if(element == null)
  41. {
  42. System.out.println("XML文件获取失败!");
  43. return null;
  44. }
  45. else if("".equals(sqlID.trim()))
  46. {
  47. System.out.println("sqlID为空!");
  48. return null;
  49. }
  50. HashMap hm = loadSqlID(element, sqlID);
  51. return hm;
  52. }
  53. /**
  54. * @desc 解析XML文件,获取所有SQL,按照KEY-VALUE的形式存放
  55. * @param element
  56. * @return
  57. */
  58. private HashMap loadElement(Element element)
  59. {
  60. HashMap hashmap = new HashMap();
  61. String reg="--[\\w\\W]+?\n";
  62. if (element.hasChildNodes())
  63. {
  64. NodeList nodelist = element.getChildNodes();
  65. int j = nodelist.getLength();
  66. for(int i = 0 ; i< j; i++)
  67. {
  68. Node node = nodelist.item(i);
  69. if(node.getNodeType() == Node.CDATA_SECTION_NODE) //CDATA段
  70. {
  71. String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
  72. if(!"".equals(node.getNodeValue().trim()))//可不判断
  73. hashmap.put(sqlid, node.getNodeValue().trim().replaceAll(reg, ""));
  74. continue;
  75. }
  76. if(node.getNodeType() == Node.TEXT_NODE)//TEXT
  77. {
  78. if(node.getParentNode().getAttributes().getNamedItem("id") == null)
  79. continue;
  80. String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
  81. if(!"".equals(node.getNodeValue().trim()))//必须判断
  82. hashmap.put(sqlid, node.getNodeValue().trim().replaceAll(reg, ""));
  83. continue;
  84. }
  85. if(node.getNodeType()==Node.ELEMENT_NODE)//ELEMENT
  86. {
  87. Element e = (Element)nodelist.item(i);
  88. Map map = loadElement(e);
  89. if(map.size() > 0)
  90. {
  91. Iterator it = map.keySet().iterator();
  92. while(it.hasNext())
  93. {
  94. Object key = it.next();
  95. Object value = map.get(key);
  96. hashmap.put(key , value);
  97. }
  98. }
  99. }
  100. }
  101. }
  102. return hashmap;
  103. }
  104. /**
  105. * @desc 每次执行均需从磁盘读取,废弃
  106. * @param element
  107. * @param sqlID
  108. * @deprecated
  109. * @return
  110. */
  111. private HashMap loadSqlID(Element element , String sqlID)
  112. {
  113. HashMap hashmap = new HashMap();
  114. if (element.hasChildNodes())
  115. {
  116. NodeList nodelist = element.getChildNodes();
  117. int j = nodelist.getLength();
  118. for(int i = 0 ; i< j; i++)
  119. {
  120. Node node = nodelist.item(i);
  121. if(node.getNodeType() == Node.CDATA_SECTION_NODE) //CDATA段
  122. {
  123. String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
  124. if(sqlid.equals(sqlID))
  125. {
  126. if(!"".equals(node.getNodeValue().trim()))//可不判断
  127. hashmap.put(sqlid, node.getNodeValue().trim());
  128. continue;
  129. }
  130. }
  131. if(node.getNodeType() == Node.TEXT_NODE)//TEXT
  132. {
  133. if(node.getParentNode().getAttributes().getNamedItem("id") == null)
  134. continue;
  135. String sqlid = node.getParentNode().getAttributes().getNamedItem("id").getNodeValue();
  136. if(sqlid.equals(sqlID))
  137. {
  138. if(!"".equals(node.getNodeValue().trim()))//必须判断
  139. hashmap.put(sqlid, node.getNodeValue().trim());
  140. continue;
  141. }
  142. }
  143. if(node.getNodeType()==Node.ELEMENT_NODE)//ELEMENT
  144. {
  145. Element e = (Element)nodelist.item(i);
  146. Map map = loadSqlID(e , sqlID);
  147. if(map.size() > 0) hashmap.put(sqlID , map.get(sqlID));
  148. }
  149. }
  150. }
  151. return hashmap;
  152. }
  153. }