JAVA解析XML的四种方法

      XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),

      XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下:

     <?xml version=”1.0″ encoding=”UTF-8″?>

     <employees>   

             <employee>   

                   <name>ddviplinux</name>   

                   <sex>m</sex>   

                   <age>30</age>   

             </employee>   

     </employees> 

     首先定义一个操作XML文档的接口XmlDocument 它定义了XML文档的建立与解析的接口。

     package com.alisoft.facepay.framework.bean;   

  1. public interface XmlDocument {   
  2. /**   
  3. * 建立XML文档   
  4. * @param fileName 文件全路径名称   
  5. */   
  6. public void createXml(String fileName);   
  7. /**   
  8. * 解析XML文档   
  9. * @param fileName 文件全路径名称   
  10. */   
  11. 18.public void parserXml(String fileName);   
  12. 19.}   
  13. 20.package com.alisoft.facepay.framework.bean;   
  14. 21./**   
  15. 22. *   
  16. 23. * @author hongliang.dinghl   
  17. * 定义XML文档建立与解析的接口   
  18. */   
  19. public interface XmlDocument {   
  20. /**   
  21. * 建立XML文档   
  22. * @param fileName 文件全路径名称   
  23. */   
  24. public void createXml(String fileName);   
  25. /**   
  26. * 解析XML文档   
  27. * @param fileName 文件全路径名称   
  28. */   
  29. public void parserXml(String fileName);   

1. DOM生成和解析XML文档

     为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;

    使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

  1. public class DomDemo implements XmlDocument {   
  2. private Document document;   
  3. private String fileName;   
  4. public void init() {   
  5. try {   
  6. DocumentBuilderFactory factory = DocumentBuilderFactory   
  7. .newInstance();   
  8. DocumentBuilder builder = factory.newDocumentBuilder();   
  9. this.document = builder.newDocument();   
  10. catch (ParserConfigurationException e) {   
  11. System.out.println(e.getMessage());   
  12. }   
  13. }   
  14. public void createXml(String fileName) {   
  15. Element root = this.document.createElement(“employees”);   
  16. this.document.appendChild(root);   
  17. Element employee = this.document.createElement(“employee”);   
  18. Element name = this.document.createElement(“name”);   
  19. name.appendChild(this.document.createTextNode(“丁宏亮“));   
  20. employee.appendChild(name);   
  21. Element sex = this.document.createElement(“sex”);   
  22. sex.appendChild(this.document.createTextNode(“m”));   
  23. employee.appendChild(sex);   
  24. Element age = this.document.createElement(“age”);   
  25. age.appendChild(this.document.createTextNode(“30″));   
  26. employee.appendChild(age);   
  27. root.appendChild(employee);   
  28. TransformerFactory tf = TransformerFactory.newInstance();   
  29. try {   
  30. Transformer transformer = tf.newTransformer();   
  31. DOMSource source = new DOMSource(document);   
  32. transformer.setOutputProperty(OutputKeys.ENCODING, “gb2312″);   
  33. transformer.setOutputProperty(OutputKeys.INDENT, “yes”);   
  34. PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));   
  35. StreamResult result = new StreamResult(pw);   
  36. transformer.transform(source, result);   
  37. System.out.println(“生成XML文件成功!”);   
  38. catch (TransformerConfigurationException e) {   
  39. System.out.println(e.getMessage());   
  40. catch (IllegalArgumentException e) {   
  41. System.out.println(e.getMessage());   
  42. catch (FileNotFoundException e) {   
  43. System.out.println(e.getMessage());   
  44. catch (TransformerException e) {   
  45. System.out.println(e.getMessage());   
  46. }   
  47. }   
  48. public void parserXml(String fileName) {   
  49. try {   
  50. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();   
  51. DocumentBuilder db = dbf.newDocumentBuilder();   
  52. Document document = db.parse(fileName);   
  53. NodeList employees = document.getChildNodes();   
  54. for (int i = 0; i < employees.getLength(); i++) {   
  55. Node employee = employees.item(i);   
  56. NodeList employeeInfo = employee.getChildNodes();   
  57. for (int j = 0; j < employeeInfo.getLength(); j++) {   
  58. Node node = employeeInfo.item(j);   
  59. NodeList employeeMeta = node.getChildNodes();   
  60. for (int k = 0; k < employeeMeta.getLength(); k++) {   
  61. System.out.println(employeeMeta.item(k).getNodeName()   
  62.  + “:” + employeeMeta.item(k).getTextContent());   
  63. }   
  64. }   
  65. }   
  66. System.out.println(“解析完毕“);   
  67. catch (FileNotFoundException e) {   
  68. System.out.println(e.getMessage());   
  69. catch (ParserConfigurationException e) {   
  70. System.out.println(e.getMessage());   
  71. catch (SAXException e) {   
  72. System.out.println(e.getMessage());   
  73. catch (IOException e) {   
  74. System.out.println(e.getMessage());   
  75. }   
  76. }   
  77. }  
原文地址:https://www.cnblogs.com/lnlvinso/p/3751693.html