MyDOM.java
上传用户:zhaokuo188
上传日期:2022-05-16
资源大小:989k
文件大小:7k
源码类别:

xml/soap/webservice

开发平台:

Java

  1. package com.waytojob.xml;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.util.List;
  6. import javax.xml.transform.Transformer;
  7. import javax.xml.transform.TransformerConfigurationException;
  8. import javax.xml.transform.TransformerException;
  9. import javax.xml.transform.TransformerFactory;
  10. import javax.xml.transform.TransformerFactoryConfigurationError;
  11. import javax.xml.transform.stream.StreamSource;
  12. import org.dom4j.Comment;
  13. import org.dom4j.Document;
  14. import org.dom4j.DocumentException;
  15. import org.dom4j.DocumentHelper;
  16. import org.dom4j.Element;
  17. import org.dom4j.Node;
  18. import org.dom4j.io.DocumentResult;
  19. import org.dom4j.io.DocumentSource;
  20. import org.dom4j.io.OutputFormat;
  21. import org.dom4j.io.SAXReader;
  22. import org.dom4j.io.XMLWriter;
  23. public class MyDOM {
  24. public static void main(String[] args) {
  25. MyDOM dom = new MyDOM();
  26. Document doc1 = dom.createDOM();
  27. dom.saveDOM(doc1, "E:/exam_xml/bs1.xml");
  28. doc1 = dom.readDOM("E:/exam_xml/bs1.xml");
  29. Document doc2 = dom.addElement(doc1);
  30. dom.saveDOM(doc2, "E:/exam_xml/bs2.xml");
  31. doc2 = dom.readDOM("E:/exam_xml/bs2.xml");
  32. Document doc3 = dom.delElement(doc2);
  33. dom.saveDOM(doc3, "E:/exam_xml/bs3.xml");
  34. doc3 = dom.readDOM("E:/exam_xml/bs3.xml");
  35. Document doc4 = dom.modifyElement(doc3);
  36. dom.saveDOM(doc4, "E:/exam_xml/bs4.xml");
  37. doc4 = dom.readDOM("E:/exam_xml/bs4.xml");
  38. System.out.println("-----------------------");
  39. System.out.println(dom.findElement(doc4));
  40. System.out.println("-----------------------");
  41.  doc4 = dom.readDOM("E:/exam_xml/bs4.xml");
  42.  Document doc5 = dom.addAttr(doc4);
  43.  dom.saveDOM(doc5, "E:/exam_xml/bs5.xml");
  44.  doc5 = dom.readDOM("E:/exam_xml/bs5.xml");
  45.  Document doc6 = dom.modifyAttr(doc5);
  46.  dom.saveDOM(doc6, "E:/exam_xml/bs6.xml");
  47.  doc6 = dom.readDOM("E:/exam_xml/bs6.xml");
  48.  Document doc7 = dom.delAttr(doc6);
  49.  dom.saveDOM(doc7, "E:/exam_xml/bs7.xml");
  50.  doc7 = dom.readDOM("E:/exam_xml/bs7.xml");
  51.  Document doc8 = dom.modifyComment(doc7);
  52.  dom.saveDOM(doc8, "E:/exam_xml/bs8.xml");
  53.  dom.xlst();
  54. }
  55. public Document createDOM() {
  56. Document doc = DocumentHelper.createDocument();
  57. Element bookStore = doc.addElement("bookStore");
  58. bookStore.addAttribute("name", "新华书店");
  59. bookStore.addComment("新街口的那家");
  60. Element cate = bookStore.addElement("category");
  61. cate.addAttribute("name", "信息技术");
  62. Element book = cate.addElement("book");
  63. Element title = book.addElement("title");
  64. title.setText("精通JAVA");
  65. Element author = book.addElement("author");
  66. author.setText("James Gosling");
  67. Element price = book.addElement("price");
  68. price.setText("60.0");
  69. book = cate.addElement("book");
  70. title = book.addElement("title");
  71. title.setText("精通Database");
  72. author = book.addElement("author");
  73. author.setText("E.F. Codd");
  74. price = book.addElement("price");
  75. price.setText("100.0");
  76. System.out.println("create doc");
  77. return doc;
  78. }
  79. public void saveDOM(Document doc, String path) {
  80. FileOutputStream fos = null;
  81. XMLWriter xw = null;
  82. try {
  83. // 指定保存路径
  84. fos = new FileOutputStream(path);
  85. // 设保存格式1) createCompactFormat压缩格式,2)createPrettyPrint漂亮格式
  86. OutputFormat format = OutputFormat.createPrettyPrint();
  87. format.setEncoding("gbk");
  88. xw = new XMLWriter(fos, format);
  89. xw.write(doc);
  90. System.out.println("save dom to " + path);
  91. } catch (IOException e) {
  92. e.printStackTrace();
  93. } finally {
  94. if (fos != null) {
  95. try {
  96. fos.close();
  97. } catch (IOException e) {
  98. e.printStackTrace();
  99. }
  100. }
  101. if (xw != null) {
  102. try {
  103. xw.close();
  104. } catch (IOException e) {
  105. e.printStackTrace();
  106. }
  107. }
  108. }
  109. }
  110. public Document readDOM(String path) {
  111. SAXReader sr = new SAXReader();
  112. Document doc = null;
  113. try {
  114. doc = sr.read(new File(path));
  115. } catch (DocumentException e) {
  116. e.printStackTrace();
  117. }
  118. System.out.println("read dom from " + path);
  119. return doc;
  120. }
  121. public Document addElement(Document doc) {
  122. // 得到root元素
  123. Element bookStore = doc.getRootElement();
  124. Element cate = bookStore.addElement("category");
  125. cate.addAttribute("name", "经济学");
  126. Element book = cate.addElement("book");
  127. Element title = book.addElement("title");
  128. title.setText("宏观经济学");
  129. Element author = book.addElement("author");
  130. author.setText("Gregory Mankiw");
  131. Element price = book.addElement("price");
  132. price.setText("80.0");
  133. System.out.println("add element");
  134. return doc;
  135. }
  136. public Document delElement(Document doc) {
  137. // XPATH
  138. List<Node> nodes = doc.selectNodes("/bookStore/category/book/title");
  139. for (Node node : nodes) {
  140. if ("精通Database".equals(node.getText())) {
  141. node.getParent().getParent().remove(node.getParent());
  142. System.out.println("del element** ");
  143. break;
  144. }
  145. }
  146. return doc;
  147. }
  148. public Document modifyElement(Document doc) {
  149. List<Element> nodes = doc.selectNodes("/bookStore/category/book");
  150. for (Element node : nodes) {
  151. if ("精通JAVA".equals(node.element("title").getText())) {
  152. node.element("price").setText("30.0");
  153. System.out.println("modify element** ");
  154. break;
  155. }
  156. }
  157. return doc;
  158. }
  159. public String findElement(Document doc) {
  160. List<Element> nodes = doc.selectNodes("/bookStore/category/book");
  161. for (Element node : nodes) {
  162. if ("精通JAVA".equals(node.element("title").getText())) {
  163. return node.asXML();
  164. }
  165. }
  166. return null;
  167. }
  168. public Document addAttr(Document doc) {
  169. List<Element> nodes = doc
  170. .selectNodes("/bookStore/category[@name='经济学']");
  171. for (Element node : nodes) {
  172. // if ("经济学".equals(node.attribute("name").getText())) {
  173. node.addAttribute("new", "True");
  174. // System.out.println("add attr");
  175. // break;
  176. // }
  177. }
  178. return doc;
  179. }
  180. public Document modifyAttr(Document doc) {
  181. List<Element> nodes = doc
  182. .selectNodes("/bookStore/category[@name='信息技术']");
  183. for (Element node : nodes) {
  184. // if ("经济学".equals(node.attribute("name").getText())) {
  185. node.attribute("name").setText("IT");
  186. // System.out.println("add attr");
  187. // break;
  188. // }
  189. }
  190. return doc;
  191. }
  192. public Document delAttr(Document doc) {
  193. List<Element> nodes = doc
  194. .selectNodes("/bookStore/category[@name='经济学']");
  195. for (Element node : nodes) {
  196. // if ("经济学".equals(node.attribute("name").getText())) {
  197. node.remove(node.attribute("new"));
  198. // System.out.println("add attr");
  199. // break;
  200. // }
  201. }
  202. return doc;
  203. }
  204. public Document modifyComment(Document doc) {
  205. List<Comment> nodes = doc.selectNodes("/bookStore/comment()");
  206. for (Comment node : nodes) {
  207. node.setText("山西路");
  208. }
  209. return doc;
  210. }
  211. public void xlst() {
  212. try {
  213. Transformer trans = TransformerFactory.newInstance()
  214. .newTransformer(new StreamSource("E:/exam_xml/bs.xsl"));
  215. MyDOM dom = new MyDOM();
  216. DocumentSource ds = new DocumentSource(dom.readDOM("E:/exam_xml/bs2.xml"));
  217. DocumentResult dr = new DocumentResult();
  218. trans.transform(ds, dr);
  219. dom.saveDOM(dr.getDocument(), "E:/exam_xml/bs2.html");
  220. } catch (TransformerConfigurationException e) {
  221. e.printStackTrace();
  222. } catch (TransformerFactoryConfigurationError e) {
  223. e.printStackTrace();
  224. } catch (TransformerException e) {
  225. e.printStackTrace();
  226. }
  227. }
  228. }