第一种:DOM。
DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据,因此,这种利用DOM接口的机制也被称作随机访问机制。

DOM接口提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的文档结构形成了一棵节点树。无论XML文档中所描述的是什么类型的信息,即便是制表数据、项目列表或一个文档,利用DOM所生成的模型都是节点树的形式。也就是说,DOM强制使用树模型来访问XML文档中的信息。由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。

DOM树所提供的随机访问方式给应用程序的开发带来了很大的灵活性,它可以任意地控制整个XML文档中的内容。然而,由于DOM分析器把整个XML文档转化成DOM树放在了内存中,因此,当文档比较大或者结构比较复杂时,对内存的需求就比较高。而且,对于结构复杂的树的遍历也是一项耗时的操作。所以,DOM分析器对机器性能的要求比较高,实现效率不十分理想。不过,由于DOM分析器所采用的树结构的思想与XML文档的结构相吻合,同时鉴于随机访问所带来的方便,因此,DOM分析器还是有很广泛的使用价值的。

  1. import java.io.File;
  2. import javax.xml.parsers.DocumentBuilder;
  3. import javax.xml.parsers.DocumentBuilderFactory;
  4. import org.w3c.dom.Document;
  5. import org.w3c.dom.Element;
  6. import org.w3c.dom.NodeList;
  7. public class DomTest1
  8. {
  9. public static void main(String[] args) throws Exception
  10. {
  11. // step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)
  12. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  13. //      System.out.println("class name: " + dbf.getClass().getName());
  14. // step 2:获得具体的dom解析器
  15. DocumentBuilder db = dbf.newDocumentBuilder();
  16. //      System.out.println("class name: " + db.getClass().getName());
  17. // step3: 解析一个xml文档,获得Document对象(根结点)
  18. Document document = db.parse(new File("candidate.xml"));
  19. NodeList list = document.getElementsByTagName("PERSON");
  20. ; i < list.getLength(); i++)
  21. {
  22. Element element = (Element)list.item(i);
  23. ).getFirstChild().getNodeValue();
  24. System.out.println("name:" + content);
  25. ).getFirstChild().getNodeValue();
  26. System.out.println("address:" + content);
  27. ).getFirstChild().getNodeValue();
  28. System.out.println("tel:" + content);
  29. ).getFirstChild().getNodeValue();
  30. System.out.println("fax:" + content);
  31. ).getFirstChild().getNodeValue();
  32. System.out.println("email:" + content);
  33. System.out.println("--------------------------------------");
  34. }
  35. }
  36. }
  1. import java.io.File;
  2. import javax.xml.parsers.DocumentBuilder;
  3. import javax.xml.parsers.DocumentBuilderFactory;
  4. import org.w3c.dom.Attr;
  5. import org.w3c.dom.Comment;
  6. import org.w3c.dom.Document;
  7. import org.w3c.dom.Element;
  8. import org.w3c.dom.NamedNodeMap;
  9. import org.w3c.dom.Node;
  10. import org.w3c.dom.NodeList;
  11. /**
  12. * 使用递归解析给定的任意一个xml文档并且将其内容输出到命令行上
  13. * @author zhanglong
  14. *
  15. */
  16. public class DomTest3
  17. {
  18. public static void main(String[] args) throws Exception
  19. {
  20. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  21. DocumentBuilder db = dbf.newDocumentBuilder();
  22. Document doc = db.parse(new File("student.xml"));
  23. //获得根元素结点
  24. Element root = doc.getDocumentElement();
  25. parseElement(root);
  26. }
  27. private static void parseElement(Element element)
  28. {
  29. String tagName = element.getNodeName();
  30. NodeList children = element.getChildNodes();
  31. System.out.print("<" + tagName);
  32. //element元素的所有属性所构成的NamedNodeMap对象,需要对其进行判断
  33. NamedNodeMap map = element.getAttributes();
  34. //如果该元素存在属性
  35. if(null != map)
  36. {
  37. ; i < map.getLength(); i++)
  38. {
  39. //获得该元素的每一个属性
  40. Attr attr = (Attr)map.item(i);
  41. String attrName = attr.getName();
  42. String attrValue = attr.getValue();
  43. System.out.print(" " + attrName + "=\"" + attrValue + "\"");
  44. }
  45. }
  46. System.out.print(">");
  47. ; i < children.getLength(); i++)
  48. {
  49. Node node = children.item(i);
  50. //获得结点的类型
  51. short nodeType = node.getNodeType();
  52. if(nodeType == Node.ELEMENT_NODE)
  53. {
  54. //是元素,继续递归
  55. parseElement((Element)node);
  56. }
  57. else if(nodeType == Node.TEXT_NODE)
  58. {
  59. //递归出口
  60. System.out.print(node.getNodeValue());
  61. }
  62. else if(nodeType == Node.COMMENT_NODE)
  63. {
  64. System.out.print("<!--");
  65. Comment comment = (Comment)node;
  66. //注释内容
  67. String data = comment.getData();
  68. System.out.print(data);
  69. System.out.print("-->");
  70. }
  71. }
  72. System.out.print("</" + tagName + ">");
  73. }
  74. }

第二种:SAX
SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

  1. import java.io.File;
  2. import javax.xml.parsers.SAXParser;
  3. import javax.xml.parsers.SAXParserFactory;
  4. import org.xml.sax.Attributes;
  5. import org.xml.sax.SAXException;
  6. import org.xml.sax.helpers.DefaultHandler;
  7. public class SaxTest1
  8. {
  9. public static void main(String[] args) throws Exception
  10. {
  11. //step1: 获得SAX解析器工厂实例
  12. SAXParserFactory factory = SAXParserFactory.newInstance();
  13. //step2: 获得SAX解析器实例
  14. SAXParser parser = factory.newSAXParser();
  15. //step3: 开始进行解析
  16. parser.parse(new File("student.xml"), new MyHandler());
  17. }
  18. }
  19. class MyHandler extends DefaultHandler
  20. {
  21. @Override
  22. public void startDocument() throws SAXException
  23. {
  24. System.out.println("parse began");
  25. }
  26. @Override
  27. public void endDocument() throws SAXException
  28. {
  29. System.out.println("parse finished");
  30. }
  31. @Override
  32. public void startElement(String uri, String localName, String qName,
  33. Attributes attributes) throws SAXException
  34. {
  35. System.out.println("start element");
  36. }
  37. @Override
  38. public void endElement(String uri, String localName, String qName)
  39. throws SAXException
  40. {
  41. System.out.println("finish element");
  42. }
  43. }
  1. import java.io.File;
  2. import java.util.Stack;
  3. import javax.xml.parsers.SAXParser;
  4. import javax.xml.parsers.SAXParserFactory;
  5. import org.xml.sax.Attributes;
  6. import org.xml.sax.SAXException;
  7. import org.xml.sax.helpers.DefaultHandler;
  8. public class SaxTest2
  9. {
  10. public static void main(String[] args) throws Exception
  11. {
  12. SAXParserFactory factory = SAXParserFactory.newInstance();
  13. SAXParser parser = factory.newSAXParser();
  14. parser.parse(new File("student.xml"), new MyHandler2());
  15. }
  16. }
  17. class MyHandler2 extends DefaultHandler
  18. {
  19. private Stack<String> stack = new Stack<String>();
  20. private String name;
  21. private String gender;
  22. private String age;
  23. @Override
  24. public void startElement(String uri, String localName, String qName,
  25. Attributes attributes) throws SAXException
  26. {
  27. stack.push(qName);
  28. ; i < attributes.getLength(); i++)
  29. {
  30. String attrName = attributes.getQName(i);
  31. String attrValue = attributes.getValue(i);
  32. System.out.println(attrName + "=" + attrValue);
  33. }
  34. }
  35. @Override
  36. public void characters(char[] ch, int start, int length)
  37. throws SAXException
  38. {
  39. String tag = stack.peek();
  40. if("姓名".equals(tag))
  41. {
  42. name = new String(ch, start,length);
  43. }
  44. else if("性别".equals(tag))
  45. {
  46. gender = new String(ch, start, length);
  47. }
  48. else if("年龄".equals(tag))
  49. {
  50. age = new String(ch, start, length);
  51. }
  52. }
  53. @Override
  54. public void endElement(String uri, String localName, String qName)
  55. throws SAXException
  56. {
  57. stack.pop(); //表示该元素已经解析完毕,需要从栈中弹出
  58. if("学生".equals(qName))
  59. {
  60. System.out.println("姓名:" + name);
  61. System.out.println("性别:" + gender);
  62. System.out.println("年龄:" + age);
  63. System.out.println();
  64. }
  65. }
  66. }

第三种JDOM:

JDOM是一个开源项目,它基于树型结构,利用纯Java的技术对XML文档实现解析、生成、序列化以及多种操作。(http://jdom.org)

•JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念等),把SAX和DOM的功能有效地结合起来。

•JDOM是用Java语言读、写、操作XML的新API函数。在直接、简单和高效的前提下,这些API函数被最大限度的优化。

jdom创建xml

  1. import java.io.FileWriter;
  2. import org.jdom.Attribute;
  3. import org.jdom.Comment;
  4. import org.jdom.Document;
  5. import org.jdom.Element;
  6. import org.jdom.output.Format;
  7. import org.jdom.output.XMLOutputter;
  8. public class JDomTest1
  9. {
  10. public static void main(String[] args) throws Exception
  11. {
  12. Document document = new Document();
  13. Element root = new Element("root");
  14. document.addContent(root);
  15. Comment comment = new Comment("This is my comments");
  16. root.addContent(comment);
  17. Element e = new Element("hello");
  18. e.setAttribute("sohu", "www.sohu.com");
  19. root.addContent(e);
  20. Element e2 = new Element("world");
  21. Attribute attr = new Attribute("test", "hehe");
  22. e2.setAttribute(attr);
  23. e.addContent(e2);
  24. e2.addContent(new Element("aaa").setAttribute("a", "b")
  25. .setAttribute("x", "y").setAttribute("gg", "hh").setText("text content"));
  26. Format format = Format.getPrettyFormat();
  27. format.setIndent("    ");
  28. //      format.setEncoding("gbk");
  29. XMLOutputter out = new XMLOutputter(format);
  30. out.output(document, new FileWriter("jdom.xml"));
  31. }
  32. }

JDOM解析xml

  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.util.List;
  4. import org.jdom.Attribute;
  5. import org.jdom.Document;
  6. import org.jdom.Element;
  7. import org.jdom.input.SAXBuilder;
  8. import org.jdom.output.Format;
  9. import org.jdom.output.XMLOutputter;
  10. public class JDomTest2
  11. {
  12. public static void main(String[] args) throws Exception
  13. {
  14. SAXBuilder builder = new SAXBuilder();
  15. Document doc = builder.build(new File("jdom.xml"));
  16. Element element = doc.getRootElement();
  17. System.out.println(element.getName());
  18. Element hello = element.getChild("hello");
  19. System.out.println(hello.getText());
  20. List list = hello.getAttributes();
  21. ;i < list.size(); i++)
  22. {
  23. Attribute attr = (Attribute)list.get(i);
  24. String attrName = attr.getName();
  25. String attrValue = attr.getValue();
  26. System.out.println(attrName + "=" + attrValue);
  27. }
  28. hello.removeChild("world");
  29. XMLOutputter out = new XMLOutputter(Format.getPrettyFormat().setIndent("    "));
  30. out.output(doc, new FileOutputStream("jdom2.xml"));
  31. }
  32. }

Dom4j

  1. import java.io.FileOutputStream;
  2. import java.io.FileWriter;
  3. import org.dom4j.Document;
  4. import org.dom4j.DocumentHelper;
  5. import org.dom4j.Element;
  6. import org.dom4j.io.OutputFormat;
  7. import org.dom4j.io.XMLWriter;
  8. public class Test1
  9. {
  10. public static void main(String[] args) throws Exception
  11. {
  12. // 创建文档并设置文档的根元素节点 :第一种方式
  13. // Document document = DocumentHelper.createDocument();
  14. //
  15. // Element root = DocumentHelper.createElement("student");
  16. //
  17. // document.setRootElement(root);
  18. // 创建文档并设置文档的根元素节点 :第二种方式
  19. Element root = DocumentHelper.createElement("student");
  20. Document document = DocumentHelper.createDocument(root);
  21. root.addAttribute("name", "zhangsan");
  22. Element helloElement = root.addElement("hello");
  23. Element worldElement = root.addElement("world");
  24. helloElement.setText("hello");
  25. worldElement.setText("world");
  26. helloElement.addAttribute("age", "20");
  27. XMLWriter xmlWriter = new XMLWriter();
  28. xmlWriter.write(document);
  29. OutputFormat format = new OutputFormat("    ", true);
  30. XMLWriter xmlWriter2 = new XMLWriter(new FileOutputStream("student2.xml"), format);
  31. xmlWriter2.write(document);
  32. XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student3.xml"), format);
  33. xmlWriter3.write(document);
  34. xmlWriter3.close();
  35. }
  36. }
  1. import java.io.File;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import org.dom4j.Document;
  7. import org.dom4j.Element;
  8. import org.dom4j.io.DOMReader;
  9. import org.dom4j.io.SAXReader;
  10. public class Test2
  11. {
  12. public static void main(String[] args) throws Exception
  13. {
  14. SAXReader saxReader = new SAXReader();
  15. Document doc = saxReader.read(new File("student2.xml"));
  16. Element root = doc.getRootElement();
  17. System.out.println("root element: " + root.getName());
  18. List childList = root.elements();
  19. System.out.println(childList.size());
  20. List childList2 = root.elements("hello");
  21. System.out.println(childList2.size());
  22. Element first = root.element("hello");
  23. System.out.println(first.attributeValue("age"));
  24. for(Iterator iter = root.elementIterator(); iter.hasNext();)
  25. {
  26. Element e = (Element)iter.next();
  27. System.out.println(e.attributeValue("age"));
  28. }
  29. System.out.println("---------------------------");
  30. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  31. DocumentBuilder db = dbf.newDocumentBuilder();
  32. org.w3c.dom.Document document = db.parse(new File("student2.xml"));
  33. DOMReader domReader = new DOMReader();
  34. //将JAXP的Document转换为dom4j的Document
  35. Document d = domReader.read(document);
  36. Element rootElement = d.getRootElement();
  37. System.out.println(rootElement.getName());
  38. }
  39. }
  1. import java.io.FileWriter;
  2. import org.jdom.Attribute;
  3. import org.jdom.Document;
  4. import org.jdom.Element;
  5. import org.jdom.output.Format;
  6. import org.jdom.output.XMLOutputter;
  7. public class Test3
  8. {
  9. public static void main(String[] args) throws Exception
  10. {
  11. Document document = new Document();
  12. Element root = new Element("联系人列表").setAttribute(new Attribute("公司",
  13. "A集团"));
  14. document.addContent(root);
  15. Element contactPerson = new Element("联系人");
  16. root.addContent(contactPerson);
  17. contactPerson
  18. .addContent(new Element("姓名").setText("张三"))
  19. .addContent(new Element("公司").setText("A公司"))
  20. .addContent(new Element("电话").setText("021-55556666"))
  21. .addContent(
  22. new Element("地址")
  23. .addContent(new Element("街道").setText("5街"))
  24. .addContent(new Element("城市").setText("上海"))
  25. .addContent(new Element("省份").setText("上海市")));
  26. XMLOutputter output = new XMLOutputter(Format.getPrettyFormat()
  27. .setIndent("    ").setEncoding("gbk"));
  28. output.output(document, new FileWriter("contact.xml"));
  29. }
  30. }

http://inotgaoshou.iteye.com/blog/1012188

java中多种方式解析xml的更多相关文章

  1. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  2. java中多种方式读文件

    转自:http://www.jb51.net/article/16396.htm java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内 ...

  3. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  4. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  5. 在java中使用dom4j解析xml

    创建xml文档并输出到文件 import java.io.File; import java.io.FileOutputStream; import org.dom4j.Document; impor ...

  6. java中利用dom4j解析XML文件

    官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...

  7. JAVA中使用Dom解析XML

    在G盘下新建XML文档:person.xml,XML代码: <?xml version="1.0" encoding="utf-8"?> <s ...

  8. Java中实现SAX解析xml文件到MySQL数据库

    大致步骤: 1.Java bean 2.DBHelper.java 3.重写DefaultHandler中的方法:MyHander.java 4.循环写数据库:SAXParserDemo.java ① ...

  9. JAVA中通过Jaxp操作XML文件基础

    Java中有多种方式操作XML文件,目前讲一讲以SUN公司提供的DocumentBuilderFactory工厂类对象操作XML. 使用XML基本操作就是需要CRUD(增删改查),那么首先通过一个查询 ...

随机推荐

  1. 一、简单的图片上传并预览功能input[file]

    一.简单的图片上传并预览功能input[file] <!DOCTYPE html> <html lang="en"> <head> <me ...

  2. 如何卸载不用的VDP

    1.首先删除VDP 2.登录AD的DNS当中,删除VDP对应的DNS解析 3.1登陆 https://vcenterip/mob 这个地址. 输入你的管理员账号密码. 3.2进入content链接. ...

  3. Go 迭代切片

    迭代切片有两种方式: 1. 使用 for range 迭代切片   // 其长度和容量都是 4 个元素 slice := [], , , } // 迭代每一个元素,并显示其值 for index, v ...

  4. Adblock Plus 添加过滤规则

    过滤掉相关的DIV 如要过滤某网站的 如例1:  home.firefoxchina.cn##div#module-game##元素#名字 过滤掉ID为名字的元素##div.名字 class为名字的D ...

  5. SpringCloud-Nexfilx

    1.概述 Spring Cloud Netflix provides Netflix OSS integrations for Spring Boot apps through autoconfigu ...

  6. 支付宝证书签名 PHP SDK

    PHP 接入支付宝证书方式签名以及验签 支付宝在 2019.10.25 日左右更新了新的 PHP SDK (v4.1.0). 之前的 PHP SDK(v3.4.2) 仅支持公钥方式加签.这次更新之后 ...

  7. MySQL提示:too many connections

    1.首先查询最大连接数 show variables like '%max_connections%'; 2.检查当前的连接情况: show processlist; 3.批量kill当前的连接: 通 ...

  8. Junit单元测试之MockMvc

    在测试restful风格的接口时,springmvc为我们提供了MockMVC架构,使用起来也很方便. 下面写个笔记,便于以后使用时参考备用. 一 场景 1 . 提供一个restful风格的接口 im ...

  9. C# webbrowser专题

    C# .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 2 Study Case :高亮显示 上一个例子中我们学会了查找文本——究跟到底,对Web页面还是只读不写.那么,如果 ...

  10. windows系统查看端口占用情况

    windows系统,经常发现我们需要使用的端口被别的程序占用.但是我们又不知道是被谁占用,那如何查看端口被哪个程序占用呢?在这里就一起看看如何查看某个端口被占用的解决方法. 开始---->运行- ...