1.DMO解析

  1. package cn.itcast.xml.dom;
  2.  
  3. import java.io.File;
  4.  
  5. import javax.xml.parsers.DocumentBuilder;
  6. import javax.xml.parsers.DocumentBuilderFactory;
  7.  
  8. import org.w3c.dom.Document;
  9. import org.w3c.dom.Element;
  10. import org.w3c.dom.Node;
  11. import org.w3c.dom.NodeList;
  12.  
  13. public class Demo1 {
  14. public static void main(String[] args) throws Exception {
  15. //1 创建JAXPDOM 解析器工厂
  16. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  17. //2 通过工厂获得解析器
  18. DocumentBuilder builder= factory.newDocumentBuilder();
  19. //3 使用解析器解析文档得到Domcument对象
  20. Document doc = builder.parse(new File("src/student.xml"));
  21. //...........
  22. //拿到所有的学生并打印学生信息
  23. //1 获得所有student元素对象
  24. NodeList students = doc.getElementsByTagName("student");
  25. //2 遍历这些对象.取得number属性
  26. for(int i = 0 ; i < students.getLength() ; i++ ){
  27. /*if( students.item(i) instanceof Element){//判断是不是ELement对象
  28. Element student = (Element)students.item(i);
  29. }*/
  30. if(students.item(i).getNodeType() == Node.ELEMENT_NODE){
  31. Element student = (Element)students.item(i);
  32. String number = student.getAttribute("number");
  33. System.out.println("当前学生的学号是"+number);
  34. //3 取得子元素.遍历子元素
  35. NodeList list = student.getChildNodes();
  36. for(int x = 0 ; x < list.getLength() ; x++){
  37. if(list.item(x).getNodeType() == Node.ELEMENT_NODE){
  38. // info可能是 name age sex
  39. Element info = (Element)list.item(x);
  40. // Node nodeName ==> 标签名
  41. if(info.getNodeName().equals("name")){
  42. System.out.println("当前学生的姓名是"+info.getTextContent());
  43. }else if(info.getNodeName().equals("age")){
  44. System.out.println("当前学生的年龄是是"+info.getTextContent());
  45. }else if(info.getNodeName().equals("sex")){
  46. System.out.println("当前学生的性别是"+info.getTextContent());
  47. }
  48. }
  49. }
  50.  
  51. }
  52.  
  53. }
  54. //4取得对应 名称 年龄 性别
  55. }
  56. }

2.SAX解析

1.重写处理函数

  1. package cn.itcast.xml.sax;
  2.  
  3. import org.xml.sax.Attributes;
  4. import org.xml.sax.SAXException;
  5. import org.xml.sax.helpers.DefaultHandler;
  6.  
  7. public class MyHandler extends DefaultHandler {
  8.  
  9. @Override
  10. public void startDocument() throws SAXException {
  11. super.startDocument();
  12. System.out.println("文档开始解析!");
  13. }
  14.  
  15. @Override
  16. public void startElement(String uri, String localName, String qName,
  17. Attributes attributes) throws SAXException {
  18. System.out.println("当前遍历的标签是"+qName);
  19. String number = attributes.getValue("number");
  20.  
  21. if(!"".equals(number) && number!=null){
  22. System.out.println("学生的学号是:"+number);
  23. }
  24. }
  25.  
  26. @Override
  27. public void characters(char[] ch, int start, int length)
  28. throws SAXException {
  29. String str =new String(ch,start,length);
  30. //去掉空白文本
  31. str = str.trim();
  32.  
  33. if(str.length() != 0){
  34. System.out.println("当前解析的文本是:"+str);
  35. }
  36.  
  37. }
  38. @Override
  39. public void endElement(String uri, String localName, String qName)
  40. throws SAXException {
  41. super.endElement(uri, localName, qName);
  42. System.out.println(qName+"元素解析结束");
  43. }
  44.  
  45. @Override
  46. public void endDocument() throws SAXException {
  47. super.endDocument();
  48. System.out.println("文档结束解析!");
  49. }
  50. }

2.使用它

  1. package cn.itcast.xml.sax;
  2.  
  3. import java.io.File;
  4.  
  5. import javax.xml.parsers.SAXParser;
  6. import javax.xml.parsers.SAXParserFactory;
  7.  
  8. public class Demo1 {
  9. public static void main(String[] args) throws Exception {
  10. //1 创建sax 解析工厂
  11. SAXParserFactory factory = SAXParserFactory.newInstance();
  12. //2 获得sax解析器
  13. SAXParser saxParser =factory.newSAXParser();
  14. //3 使用sax解析器解析xml文档.
  15. saxParser.parse(new File("src/student.xml"), new MyHandler());
  16. }
  17. }

3.DEMO4J

1.读取 xml文档并打印文档内容

  1. package cn.itcast.xml.dom4j;
  2.  
  3. import org.dom4j.Document;
  4. import org.dom4j.DocumentException;
  5. import org.dom4j.io.SAXReader;
  6.  
  7. public class Demo1 {
  8. //hello 读取 xml文档并打印文档内容
  9. public static void main(String[] args) throws Exception {
  10. SAXReader reader = new SAXReader();
  11. Document document = reader.read("src/student.xml");
  12. System.out.println(document.asXML());
  13. }
  14. }

2.取出所有学生的信息

  1. package cn.itcast.xml.dom4j;
  2.  
  3. import java.util.Iterator;
  4.  
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.io.SAXReader;
  8.  
  9. public class Demo2 {
  10. //取出所有学生的信息
  11. public static void main(String[] args) throws Exception {
  12. SAXReader reader = new SAXReader();
  13. Document document = reader.read("src/student.xml");
  14. //通过文档对象获得 根节点
  15. Element root = document.getRootElement();
  16. //遍历根节点下 ,名字为student的子元素节点
  17. for ( Iterator i = root.elementIterator( "student" ); i.hasNext(); ) {
  18. Element student = (Element) i.next();
  19. //获得学生的number属性
  20. String number = student.attributeValue("number");
  21. System.out.println("学生的学号是"+number);
  22. //获得学生的子元素
  23. for ( Iterator j = student.elementIterator(); j.hasNext(); ) {
  24. //可能是name age sex
  25. Element info = (Element) j.next();
  26. //获得元素的元素名
  27. if(info.getName().equals("name")){
  28. System.out.println("学生的姓名是"+info.getText());
  29. }else if(info.getName().equals("age")){
  30. System.out.println("学生的年龄是"+info.getText());
  31. }else if(info.getName().equals("sex")){
  32. System.out.println("学生的性别是"+info.getText());
  33. }
  34. }
  35.  
  36. }
  37.  
  38. }
  39. }

3.(增)增加一个学生.学号ITCAST_0003,名字 zhangsan 年龄30 性别male

  1. package cn.itcast.xml.dom4j;
  2.  
  3. import java.io.FileWriter;
  4.  
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.io.OutputFormat;
  8. import org.dom4j.io.SAXReader;
  9. import org.dom4j.io.XMLWriter;
  10.  
  11. public class Demo3 {
  12. //增加一个学生.学号ITCAST_0003,名字 zhangsan 年龄30 性别male
  13. public static void main(String[] args) throws Exception {
  14. SAXReader reader = new SAXReader();
  15. Document document = reader.read("src/student.xml");
  16. //通过文档对象获得 根节点
  17. Element root = document.getRootElement();
  18.  
  19. //1.在根元素下添加学生元素
  20. Element student = root.addElement("student");
  21. //2.为学生元素添加number属性
  22. student.addAttribute("number", "ITCAST_0003");
  23. //3.为学生元素添加子元素name age sex
  24. //4.为子元素添加标签体
  25. student.addElement("name").addText("zhangsan");
  26. student.addElement("age").addText("30");
  27. student.addElement("sex").addText("male");
  28.  
  29. //将内存中的Document会写到文件中
  30.  
  31. // Pretty print the document to System.out
  32. OutputFormat format = OutputFormat.createPrettyPrint();
  33. //创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
  34. XMLWriter writer = new XMLWriter( new FileWriter( "src/student_copy.xml" ), format );
  35. writer.write( document );
  36. writer.close();
  37.  
  38. /* //创建一个xml的写入器. 构造函数中传入 写入的文件的位置
  39. XMLWriter writer = new XMLWriter( new FileWriter( "src/student_copy.xml" ) );
  40. // 写入什么
  41. writer.write( document );
  42. //关闭并释放资源
  43. writer.close();*/
  44. }
  45. }

4.(改)修改一个学生.学号ITCAST_0001的学生年龄改为18

  1. package cn.itcast.xml.dom4j;
  2.  
  3. import java.io.FileWriter;
  4. import java.util.List;
  5.  
  6. import org.dom4j.Document;
  7. import org.dom4j.Element;
  8. import org.dom4j.io.OutputFormat;
  9. import org.dom4j.io.SAXReader;
  10. import org.dom4j.io.XMLWriter;
  11.  
  12. public class Demo4 {
  13. // 修改一个学生.学号ITCAST_0001的学生年龄改为18
  14. public static void main(String[] args) throws Exception {
  15. SAXReader reader = new SAXReader();
  16. Document document = reader.read("src/student.xml");
  17. // 通过文档对象获得 根节点
  18. Element root = document.getRootElement();
  19. // 1.获取到学生元素对象集合
  20. List<Element> list = root.elements();
  21. // 2.遍历集合
  22. for (int i = 0; i < list.size(); i++) {
  23. Element student = list.get(i);
  24. // 通过number属性找出要修改的student对象
  25. if (student.attributeValue("number").equals("ITCAST_0001")) {
  26. // 3.设置student元素对象age子元素的文本为18
  27. student.element("age").setText("18");
  28. }
  29. }
  30.  
  31. // 将内存中的Document会写到文件中
  32.  
  33. // Pretty print the document to System.out
  34. OutputFormat format = OutputFormat.createPrettyPrint();
  35. // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
  36. XMLWriter writer = new XMLWriter(
  37. new FileWriter("src/student_copy.xml"), format);
  38. writer.write(document);
  39. writer.close();
  40.  
  41. /*
  42. * //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
  43. * FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
  44. * document ); //关闭并释放资源 writer.close();
  45. */
  46. }
  47. }

5.(删)删除学号ITCAST_0001的学生

  1. package cn.itcast.xml.dom4j;
  2.  
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.OutputStreamWriter;
  6.  
  7. import org.dom4j.Document;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.OutputFormat;
  10. import org.dom4j.io.SAXReader;
  11. import org.dom4j.io.XMLWriter;
  12.  
  13. public class Demo6 {
  14. // 删除学号ITCAST_0001的学生
  15. public static void main(String[] args) throws Exception {
  16. SAXReader reader = new SAXReader();
  17. Document document = reader.read("src/student.xml");
  18. // 通过文档对象获得 根节点
  19. Element root = document.getRootElement();
  20.  
  21. //1.获取要删除的学生元素(xpath)
  22. String xpath = "//student[@number='ITCAST_0001']";
  23. Element student = (Element) root.selectSingleNode(xpath);
  24. //2.删除(找父节点删)
  25. root.remove(student);
  26.  
  27. // 将内存中的Document会写到文件中
  28.  
  29. // Pretty print the document to System.out
  30. OutputFormat format = OutputFormat.createPrettyPrint();
  31. format.setEncoding("GBK");
  32.  
  33. // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
  34. XMLWriter writer = new XMLWriter(
  35. new FileOutputStream(new File("src/stu.xml")), format);
  36. writer.write(document);
  37. writer.close();
  38.  
  39. /** //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
  40. * FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
  41. * document ); //关闭并释放资源 writer.close();
  42. */
  43. }
  44. }

6.整合Xpath

  1. package cn.itcast.xml.dom4j;
  2.  
  3. import java.io.FileWriter;
  4.  
  5. import org.dom4j.Document;
  6. import org.dom4j.Element;
  7. import org.dom4j.io.OutputFormat;
  8. import org.dom4j.io.SAXReader;
  9. import org.dom4j.io.XMLWriter;
  10.  
  11. public class Demo5 {
  12. // 修改一个学生.学号ITCAST_0001的学生年龄改为18
  13. public static void main(String[] args) throws Exception {
  14. SAXReader reader = new SAXReader();
  15. Document document = reader.read("src/student.xml");
  16. // 通过文档对象获得 根节点
  17. Element root = document.getRootElement();
  18. // 定义xpath表达式
  19. String xpath = "//student[@number='ITCAST_0001']";
  20.  
  21. // 通过表达式 选取对应的元素
  22. Element student = (Element) document.selectSingleNode(xpath);
  23.  
  24. //修改
  25. student.element("age").setText("18");
  26.  
  27. // 将内存中的Document会写到文件中
  28.  
  29. // Pretty print the document to System.out
  30. OutputFormat format = OutputFormat.createPrettyPrint();
  31. // 创建一个xml的写入器. 构造函数中传入 写入的文件的位置和 格式化器
  32. XMLWriter writer = new XMLWriter(
  33. new FileWriter("src/student_copy.xml"), format);
  34. writer.write(document);
  35. writer.close();
  36.  
  37. /*
  38. * //创建一个xml的写入器. 构造函数中传入 写入的文件的位置 XMLWriter writer = new XMLWriter( new
  39. * FileWriter( "src/student_copy.xml" ) ); // 写入什么 writer.write(
  40. * document ); //关闭并释放资源 writer.close();
  41. */
  42. }
  43. }

XML的DOM、SAX、DEMO4J及DEMO4J整合Path的代码例子的更多相关文章

  1. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

  2. 解析XML:DOM,SAX,PULL

    Android解析XML有三种方式:DOM(document object model).SAX(simple api XML).PULL 1.DOM DOM解析XML文件时,会将XML文件的所有内容 ...

  3. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  4. JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath

    今日关键词: XML解析器 DOM SAX JAXP DEMO4J XPath XML解析器 1.解析器概述 什么是解析器 XML是保存数据的文件,XML中保存的数据也需要被程序读取然后使用.那么程序 ...

  5. 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j

    解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...

  6. android解析XML总结(SAX、Pull、Dom三种方式) <转载>

    android解析XML总结(SAX.Pull.Dom三种方式) http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.htm ...

  7. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  8. Android 通过Dom, Sax, Pull解析网络xml数据

    这篇文章不是完全原创,XML解析的部分参考了 liuhe688 的文章.文章地址:http://blog.csdn.net/liuhe688/article/details/6415593 这是一个几 ...

  9. XML 解析---dom解析和sax解析

    眼下XML解析的方法主要用两种: 1.dom解析:(Document Object Model.即文档对象模型)是W3C组织推荐的解析XML的一种方式. 使用dom解析XML文档,该解析器会先把XML ...

随机推荐

  1. javascript 更改控件的class.

    指定 className即可, 如通过id,可这样更改: document.getElementById("myDIV").className = "calssName& ...

  2. [BZOJ]3737 [Pa2013]Euler

    从这个FB开始写博客啦. 也不知道会坚持多久…… = =似乎要加一句转载请注明出处 http://www.cnblogs.com/DancingOnTheTree/p/4026076.html htt ...

  3. Java中的List(转)

    List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以Li ...

  4. 移植openssh到nuc951 evb板

    移植openssh到nuc951 evb板 一 应用环境: 硬件:nuc951evb 软件:linux2.6.35 bsp 二 交叉编译openssl openssh 1.下载 openssl-1.0 ...

  5. 【Jquery EasyUI + Servlet】DataGrid,url请求带中文出现乱码的解决方案

    demo.jsp: <% String name = "乱码"; %> $(function(){ $('#dg').datagrid({ url: 'DemoServ ...

  6. js中运算符的优先级

    不确定下面表达式的运算顺序? a>b?c:d+e a&&b==c 看看下表就清楚了,下表按优先级从最高到最低的列出,具有相同优先级按从左至右的顺序求值. 运算符 描述 . [] ...

  7. HTML5 初始文档声明

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. SQLServer 2008 删除、压缩日志

    SQL Server 2008删除或压缩数据库日志的方法 由于数据库日志增长被设置为“无限制”,所以时间一长日志文件必然会很大,一个400G的数据库居然有600G的LOG文件,严重占用了磁盘空间.由于 ...

  9. android http协议post请求方式

    方式一:HttpPost(import org.apache.http.client.methods.HttpPost 代码如下: private Button button1,button2,but ...

  10. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...