• 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. }  
  • 相关阅读:
    js 前端 table 导出 excel
    js调用RadioButton1
    柱状图
    html锚点定位
    遍历所有lable并赋值
    MiniUI 在线示例
    sql更新语句
    生成word
    打开word
    操作word
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/3751693.html
Copyright © 2020-2023  润新知