先从底层的xml操作技术记录:

 当我们新建一个项目,什么架包都没加入的时候,java提供了 org.w3c.dom给我们操作xml里面的元素

  import org.w3c.dom.Document;

  import org.w3c.dom.Element;

  import org.w3c.dom.Node;

  import org.w3c.dom.NodeList;

  并且提供了 javax.xml来读取xml、对xml进行增删改操作

  如何读取一个xml文件:

  导包:

  1. javax.xml.parsers.DocumentBuilderFactory;//文本建造工厂

  2. javax.xml.parsers.DocumentBuilder;      //文本建造者

  3. org.w3c.dom.Document;                           //文本  

  

  DocumentBuilderFactory factory=null;

  DocumentBuilder builder=null;

  Document doc=null;

  

try {factory=DocumentBuilderFactory.newInstance();builder=factory.newDocumentBuilder();doc=builder.parse("练习/project1/Student2.xml");} catch (Exception e) {e.printStackTrace();}

上面的代码:从工厂new一个文本建造者,由这个建造者去拿xml文件,n(*≧▽≦*)n太面向对象了!


获取xml里面的节点,以及节点内的元素

Element对象提供一系列的方法,可以对节点执行增、删、改、查:

factory=DocumentBuilderFactory.newInstance();builder=factory.newDocumentBuilder();doc=builder.parse("练习/Student.xml");//element=build("练习/project1/Student2.xml").getDocumentElement();       Element element=doc.getDocumentElement();System.out.println("-------"+element.getTagName()+"-------");NodeList list=element.getElementsByTagName("student");for(int i=0;i<list.getLength();i++){for(int j=0;j<list.item(i).getChildNodes().getLength();j++){System.out.println(((Element)list.item(i).getChildNodes().item(j)).getNodeName()+":"+((Element)list.item(i).getChildNodes().item(j)).getTextContent());}System.out.println("--------------");}

上面的代码打印xml里面的节点和节点内的文本!

element接口里面的部分方法:

  • element.getAttribute("");                   //获取节点属性的
  • element.getElementsByTagName("");  //根据节点名或者节点列表 NodeList
  • element.getChildNodes()、element.getFirstNode()、element.getNextSibling()、element.getLastNode()     见名知意:
  • element.getTagName().....                 //获取节点名字

方法很多,不一一介绍,上面的代码中有体现!


需要注意的是:以上方法都是在内存中执行的,也就是在本地拿到东西后放在内存里面,下面我们来了解增删改时,对于多出来的操作就不觉得奇怪的

新增节点:

新增节点使用document.createElement("")方法:

//在内存中对xml新增节点:仅是在内存中element=build("练习/project1/Student2.xml").getDocumentElement();Element creELe=doc.createElement("student");Element stuno=doc.createElement("stuno");Element stuname=doc.createElement("stuname");stuname.setTextContent("大头");Element stuage=doc.createElement("stuage");stuage.setTextContent("20");Element stuinfo=doc.createElement("stuinfo");stuinfo.setTextContent("我的特点就是头特别大!");stuno.setAttribute("id","2");creELe.appendChild(stuno);creELe.appendChild(stuname);creELe.appendChild(stuage);creELe.appendChild(stuinfo);element.appendChild(creELe);

以上操作皆是内存里面的操作,要将节点保存还需要持久化:

  • import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;

TransformerFactory tfactory=TransformerFactory.newInstance();Transformer trans=tfactory.newTransformer();//源    位置Source source=new DOMSource(doc);Result result=new StreamResult(path);trans.transform(source, result);

n(*≧▽≦*)n也是面向对象!

友情提示:

在添加节点的时候大家一定注意节点之间的关系,在持久化操作的时候,source对象里面应该设置document对象,别设置成element对象

现在是初步学习,没遇到什么错,我相信在后面的学习中会遇到更多问题,到时候补充

  

删除、修改:

   与新增操作雷同,最后一定要"trans.transform(source, result)"

  不然你之前的代码就都白费了!

 

下面是重头戏dom4j:


  dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。

  

  友情提示:

  了解了底层的xml操作,dom4j操作就直接上代码,原理其实一样的。里面的方法名会有些区别,看看帮助文档都可以解决

  需要下载dom4j架包:

    官网地址:http://sourceforge.net/projects/dom4j/files/

  导入:import org.dom4j.*;

  

  •   查
public List sele(String path) throws Exception{Element element=CreateUtil.reElement(path);System.out.println("总共有:"+element.nodeCount()+"个元素");list=new ArrayList();//map=new HashMap();return forhelper(element);}
/*** 循环遍历并且返回list* @param ele* @return*/public List forhelper(Element ele){for(Iterator ite2=ele.elementIterator();ite2.hasNext();){Element ele2=(Element)ite2.next();//System.out.println(ele2.getName()+":"+ele2.getText());String word=ele2.getName()+":"+ele2.getText();list.add(word);if(ele2.nodeCount()>0){forhelper(ele2);}}return list;}

 

/*** 保存指定的document对象,指定将要存储的位置,gotopath=null时默认存储在打开的位置* @param path* @param dom* @param goToPath* @return* @throws Exception*/public boolean save(String goToPath) throws Exception{//创建documentDocument dom=DocumentHelper.createDocument();//创建根节点
        Element eleRoot=dom.addElement("Student");Element ele=eleRoot.addElement("stuno").addText("1");Element ele2=eleRoot.addElement("stuname").addText("李四");last(dom, goToPath);return false;}

 

/*** 改变文本内容* @param path* @param goToPath* @return* @throws Exception*/public boolean reEle(String path,String goToPath) throws Exception{Document dom=CreateUtil.redom(path);Element element= dom.getRootElement();System.out.println(element.getName());Element ele=element.element("stuname");System.out.println(ele.asXML());ele.setText("改变了"); last(dom, goToPath);return false;}

 

/*** 删除制定的节点,或者节点内元素* @param path* @return* @throws Exception*/public boolean del(String path,String elename) throws Exception{Document dom=CreateUtil.redom(path);Element element= dom.getRootElement();System.out.println(element.getName());Element ele=element.element(elename);if(ele!=null){System.out.println(ele.asXML());System.out.println(element.remove(ele)); last(dom, path);}else{System.out.println("没有你要查找的节点!");}return false;}

  • 持久化方法

 

/*** 从内存读取到本地* @param dom* @param path*/public void last(Document dom,String path){XMLWriter xmlw=null;try {OutputFormat output=OutputFormat.createPrettyPrint();output.setEncoding("utf-8");xmlw=new XMLWriter(new FileOutputStream(new File(path)), output);xmlw.write(dom);} catch (Exception e) {e.printStackTrace();}finally{if(xmlw!=null){try {xmlw.close();System.out.println("操作成功!");} catch (IOException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}}}

注意::

  dom4j在持久化操作时会有乱码的现象!

  小窍门:

  酱紫持久化就不会出现乱码了!

 OutputFormat output=OutputFormat.createPrettyPrint();output.setEncoding("utf-8");xmlw=new XMLWriter(new FileOutputStream(new File(path)), output);       xmlw.write(dom);
 

  

  代码不一定合理,请不要照搬!

 

转载于:https://www.cnblogs.com/gcs1995/p/4204578.html

Strus2第一次课:dom4j操作xml相关推荐

  1. 使用Dom4j操作XML数据

    --------------siwuxie095 dom4j 是一个非常优秀的 Java XML 的 API, 用来读写 XML 文件 和操作 XML 数据 特点:性能优异.功能强大.极端易用 dom ...

  2. Dom4j操作XML

    dom4j帮助文档在dom4j-1.6.1/docs/guide.html文件里面,全部是英文,但是基本上应该能看懂. 1.  四种操作xml的方式:SAX,DOM,JDOM,DOM4J. 2.  D ...

  3. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  4. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  5. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

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

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

  7. java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式详解与比较(转)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式详解与比较(转) http://wishlife.javaeye.com/blog/181865 posted on 2010-12 ...

  8. Spring Boot 使用 Dom4j XStream 操作 Xml

    阅读目录 0 Dom4j XStream 简单介绍 Dom4j XStream 1 新建 Spring Boot Maven 示例工程项目 2 引入依赖 Pom 3 Dom4j 代码实例 3.1 打开 ...

  9. dom4j实现XML操作

    dom4j实现XML操作 1.dom4j介绍 1.1.sax解析和dom解析 1.1.1.sax解析 1.1.2.dom解析 1.1.3.dom4j 1.1.4.XStream和Dom4j的区别 2. ...

最新文章

  1. 提取so文件的特征值
  2. 二十二、死锁的处理策略----预防死锁
  3. Theano 中文文档 0.9 - 7.2.5 循环
  4. 链路追踪技术的应用及实践
  5. 计算机性能在线测评,关于电脑性能测试的常见的几大方法
  6. 图像处理之添加文字水印
  7. solidworks图纸模板添加_Solidworks零件和图纸绘制流程分享
  8. Minimal Square CodeForces - 1360A(简单思维和图形判断)
  9. 一个通用纯C队列的实现
  10. mybatis-plus的 mapper.xml 路径配置的坑
  11. JMeter性能测试-安装与入门
  12. 16汇编第十讲完结Call变为函数以及指令的最后讲解
  13. 理解条件随机场(转)
  14. Table is marked as crashed and should be repaire 解决方法
  15. 中国5G频谱即将公布,5G牌照或发放四张,中国广电强势入局
  16. Go2sky -- Golang用skywalking实现全链路追踪
  17. 怎样远程控制另一台电脑
  18. 小白学python(爬虫知识1(大体框架)
  19. react native 添加自定义字体
  20. 动态网页怎样才能被搜索引擎收录

热门文章

  1. 蛮力法在字符串匹配问题中的应用(JAVA)--朴素模式匹配算法
  2. Postgre合并多行数据为一行
  3. 判断radio单选框是否选中
  4. erlang安装_RabbitMQ的使用(一)- RabbitMQ服务安装
  5. halcon 旋转_Halcon视觉软件应该如何系统学习?
  6. 训练不出结果_训练赛惨败SKT?FPX直播透露拿冠军原因!Karsa再谈离开RNG?
  7. mysql怎么插入10w测试数据_mysql快速插入100万测试数据
  8. JMS学习一(JMS介绍)
  9. 2021新职业教育行业发展研究报告
  10. 2021巨量引擎连锁经营行业洞察报告