xml:可扩展标记语言

作用:用来存储和传输数据,在web页面中作为配置文件

Dom解析:比较复杂,用到大量的抽象类和接口,内存消耗比较大

好处:可以实现随机访问标签

public class DomTest
{public static void main(String[] args) throws Exception{ArrayList<Student> al=new ArrayList<Student>();al.add(new Student(1002,"张思",25));al.add(new Student(1002,"张思",25));al.add(new Student(1002,"张思",25));al.add(new Student(1002,"张思",25));File file=new File("src/com/aowin/dom/dom.xml");//  write(file,al);read(file);}//写xml文档//思路:先在内存中创建一棵文档树private static void write(File file,ArrayList<Student> al) throws Exception{//1.创建解析工厂  DocumentBuilderFactoryDocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();//2.创建解析器 DocumentBuilder 通过解析工厂DocumentBuilder builder=factory.newDocumentBuilder();//3.创建文档树 Document  通过解析器Document document=builder.newDocument();//4.创建标签 通过Document/*Element root=document.createElement("classroom");//classroom标签Element student=document.createElement("student");//student标签student.setAttribute("time", "2016-5-4");//设置标签属性Element no=document.createElement("no");//学号标签no.setTextContent("10001");//设置标签内容Element name=document.createElement("name");//姓名标签name.setTextContent("张三");Element age=document.createElement("age");age.setTextContent("20");//5.确定标签之间的关系root.appendChild(student);//将student作为root子标签student.appendChild(no);//将no作为student子标签student.appendChild(name);student.appendChild(age);document.appendChild(root);//将root作为整棵树的根标签
*/      Element root=document.createElement("classroom");//根标签for(int i=0;i<al.size();i++){Element student=document.createElement("student");student.setAttribute("time", "2016-5-4");//设置标签属性Element no=document.createElement("no");//学号标签no.setTextContent(String.valueOf(al.get(i).no));//设置标签内容Element name=document.createElement("name");//姓名标签name.setTextContent(al.get(i).name);Element age=document.createElement("age");age.setTextContent(String.valueOf(al.get(i).age));root.appendChild(student);//将student作为root子标签student.appendChild(no);//将no作为student子标签student.appendChild(name);student.appendChild(age);}document.appendChild(root);//将root作为整棵树的根标签//6.将文档树传递到文件中 用到传输工具//首先创建传输工厂TransformerFactory transformer=TransformerFactory.newInstance();//通过传输工厂创建传输工具 transformerTransformer tf=transformer.newTransformer();DOMSource source=new DOMSource(document);//文档树源StreamResult result=new StreamResult(file);//传输的目的地//调用方法开始传输tf.transform(source, result);}//从xml文件中读取内容public static void read(File file) throws Exception{//1.创建解析器DocumentBuilder builder=DocumentBuilderFactory.newInstance().newDocumentBuilder();//2.解析指定文件成一棵文档树Document document=builder.parse(file);//3.遍历树//第一种方式:从根标签依次往下遍历/*Node root=document.getFirstChild();//拿到根标签NodeList studentList=root.getChildNodes();//拿到根标签下所有子标签studentfor(int i=0;i<studentList.getLength();i++){Node student=studentList.item(i);//拿到单个的student标签//向下转型Element e=(Element)student;String value=e.getAttribute("time");//通过属性名称获得属性值System.out.println(value);//获得student标签下的所有子标签NodeList childList=student.getChildNodes();for(int j=0;j<childList.getLength();j++){//获得单个的student下的子标签Node child=childList.item(j);//获得标签的内容String content=child.getTextContent();System.out.println(content);}}*///第二种方式:随机访问标签//随机访问student标签NodeList studentList=document.getElementsByTagName("student");//获得所有的student标签for(int i=0;i<studentList.getLength();i++){Node student=studentList.item(i);//拿到单个的student标签//向下转型Element e=(Element)student;String value=e.getAttribute("time");//通过属性名称获得属性值System.out.println(value);//获得student标签下的所有子标签NodeList childList=student.getChildNodes();for(int j=0;j<childList.getLength();j++){//获得单个的student下的子标签Node child=childList.item(j);//获得标签的内容String content=child.getTextContent();System.out.println(content);}}}
}

Dom4j:基于Dom解析的,比Dom解析要方便,用到类都是实体类

思路与Dom解析一致:

public class Dom4jTest
{public static void main(String[] args) throws Exception{//实现一次写多个对象?File file=new File("src/com/aowin/dom4j/dom4j.xml");ArrayList<Student> al=new ArrayList<Student>();al.add(new Student(1001,"李四",30));al.add(new Student(1002,"李大",31));al.add(new Student(1003,"李二",32));al.add(new Student(1004,"李三",33));
//      write(file,al);read(file);}//写文档private static void write(File file,ArrayList<Student> al) throws IOException{//1.创建文档树DocumentDocument document=DocumentHelper.createDocument();//2.添加标签Element root=document.addElement("classroom");//根标签//给根标签设置子标签/*Element student=root.addElement("student");//给标签设置属性student.addAttribute("time", "2016-5-4");Element no=student.addElement("no");//给student标签设置子标签no.setText("1001");student.addElement("name").setText("小红");//添加name标签并设置内容student.addElement("age").setText("30");*/for(int i=0;i<al.size();i++){Student stu=al.get(i);Element student=root.addElement("student");student.addAttribute("time", "2016-5-4");student.addElement("no").setText(String.valueOf(stu.no));student.addElement("name").setText(stu.name);student.addElement("age").setText(String.valueOf(stu.age));}//3.将文档传入到文件中//第一种方式:/*   FileWriter fw=new FileWriter(file);OutputFormat format=new OutputFormat();//创建格式编码对象format.setEncoding("gbk");XMLWriter writer=new XMLWriter(fw, format);writer.write(document);//将文档树写进流中fw.flush();fw.close();*///第二种方式:BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"utf-8"));document.write(bw);bw.flush();bw.close();}//从xml文件中读取数据public static void read(File file) throws Exception{//从指定文件中读取文档树//首先创建一个解析器SAXReader reader=new SAXReader();//解析指定文件Document document=reader.read(file);//遍历文档树Element root=document.getRootElement();//先拿到根标签//第一种方式:利用标签下的迭代器/*Iterator<Element> it=root.elementIterator();//获得根标签下的迭代器while(it.hasNext()){Element student=it.next();//拿到单个的student标签String value=student.attributeValue("time");//获得标签下的属性值System.out.println(value);//获得student标签所有的子标签Iterator<Element> it1=student.elementIterator();while(it1.hasNext()){Element child=it1.next();//获得student标签单个的子标签String text=child.getText();System.out.println(text);}}*///第二种方式:通过标签下的List列表List<Element> studentList=root.elements();//获得所有的student标签for(int i=0;i<studentList.size();i++){Element student=studentList.get(i);//获得单个的student标签System.out.println(student.attributeValue("time"));//获得属性值//获得student标签下的所有子标签List<Element> childList=student.elements();for(int j=0;j<childList.size();j++){Element child=childList.get(j);//单个的子标签//获得标签的内容System.out.println(child.getText());}}}
}

DOM解析,DOM4j相关推荐

  1. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  2. XML解析的三种方式(dom,sax,dom4j)

    1.Dom解析: 要解析的xml文件内容: <?xml version="1.0" encoding="utf-8" standalone="n ...

  3. Dom4j工具--XML的DOM解析(下)--写操作

    前言: 上一篇博客我开始了用Dom4j对XML进行了读操作,这篇博客主要是进行对XML的写操作 只涉及基础的内容,只要有javase基础和eclipse的使用 就可以完成, 往后的内容包括 " ...

  4. xml解析之dom、dom4j、SAX

    一.XML: 1.概念:可扩展标记语言,标签都是自定义的,就是一个记录,不需要编译 2.xml与html的区别: 1.html标签是预编译的,xml标签是自由发挥的 2.html主要是用于页面展示,x ...

  5. DOM解析与DOM4J

    今天温习了一下DOM解析,记录关键点,以次加强记忆和理解 1 DOM   把XML 文件映射成一个倒挂的"""树",以根元素为根节点,每个节点都是一个对象,通过 ...

  6. Java使用DOM和DOM4J分别解析XML文件步骤以及代码

    XML文件如下: PhoneType.xml <?xml version="1.0" encoding="UTF-8" standalone=" ...

  7. 分别使用dom和dom4j解析XML文档

    1.dom和dom4j的特点 dom是基于XML的树结构来完成解析的.dom解析XML文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用dom接口来对XML文档进行增删查改等操作.do ...

  8. 使用JAXP对xml文档进行DOM解析基础

    XML解析方式分为两种:dom和sax         dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式.        sax ...

  9. Java中Dom解析XML

    DOM将整个XML文件加载到内存中,并构建出节点树:应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点.属性等信息: 这种方式便于对XML节点的添加修改等,而且解析也很方便,然后它比较耗费内 ...

最新文章

  1. 自己动手用gensim 生成句子的word2vec 向量
  2. shell test和find命令实例解析
  3. Javascript模块化编程require.js的用法
  4. python精要(79)-模块与包组织(2)-相对导入
  5. Ajax和JSON-学习笔记03【JSON_基础语法】
  6. @RequestBody、@RequestParam、@PathVariable
  7. Linux 下rpm包搭建LAMP环境
  8. 周四下午3小时,4个行业分享,尽在信创行业发展高端研讨会数据库专场
  9. net4.0 程序没反应_笔记本触摸板没反应原因 笔记本触摸板没反应解决方法【详解】...
  10. android服务下载apk,android下载apk并安装
  11. 选择数据分析工具时要注意哪些问题
  12. js 实现省市县三级联动
  13. RHEL6.3基本网络配置(4) 其它常用网络配置文件
  14. java struts2 验证码,struts2中验证码的生成和使用
  15. 多元相关性分析_SPSS分析问卷数据的流程------一篇带你学会SPSS
  16. 2015061403 - firebug下载地址
  17. 从CentOS官网下载系统镜像
  18. 计算机ppt以学校生活为主题的作文,校园生活为话题的作文(精选10篇)
  19. Idea如何设置类头注释(图片步骤直接到位)
  20. 改变word自带公式显示的字体的方法

热门文章

  1. RocketMQ 的安装和可视化界面
  2. vue中通过定时器设置倒计时,5秒倒计时
  3. nz-zorro 主题切换 动态
  4. 二维码编码库qrencode
  5. 学习Linux有哪些工作方向?
  6. stm32调试内存越界情况
  7. Win7的2020年1月补丁下载及打补丁方法
  8. NumPy 快速入门系列:应用统计学基础概念、相关统计指标与NumPy的实现
  9. Node:找不到模块Error: Cannot find module
  10. chdir: No such file or directory (chdir()函数、strtok()函数)