1.使用dom4j解析器解析xml

***解析器dom4j是由dom4j组织提供的,针对xml进行解析。dom4j不是Javase的一部分,使用时需要导入dom4j的jar包(官网下载)

  在eclipse里,复制jar包,然后新建文件夹lib粘贴进入,然后单击鼠标右键jar包----->build path----->add to build path

  看到jar包变成奶瓶样子,表示导入成功。

* 得到document对象

      SAXReader reader=new SAXReader();

      Document document=reader.read(url);

*document对象的父接口是Node

      **如果在document对象里找不到想要的方法,就去Node里面去找。

*document里的方法getRootElement():得到根节点,并返Element

*Element也是一个接口,父接口是Node

       **Element和Node里的方法

        getParent():获取父节点

        addElement():添加标签

需求:查询所有name元素里的值

代码:

animal.xml

<?xml version="1.0" encoding="UTF-8"?>
<animal>
<cat id1="sususu">
<name>汤姆</name>
<color>black</color>
<age>10</age>
</cat>
<cat>
<name>丑小鸭</name>
<color>yellow</color>
<age>15</age>
</cat>
</animal>

dom4j.java

package  example4;
import java.io.FileOutputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

class dom4j{
    public static void main(String[] args) throws Exception {
      /*selectName();
        selectOne();
        selectSecond();
        addsex();*/
        addNameBefore();

modifyAge();

  deleteFriend();

}

//查询第一个name元素的值

public static void selectOne() throws Exception {
        SAXReader saxreader = new SAXReader();
        Document document = saxreader.read("src/example4/animal.java");
        Element root = document.getRootElement();
        Element cat = root.element("cat");
        Element name = cat.element("name");
        String s=name.getText();
        System.out.println(s);
    }

//在第一个标签cat的末尾添加一个<sex>男</sex>标签
    public static void addsex() throws DocumentException, Exception {
        SAXReader saxreader=new SAXReader();
        Document document=saxreader.read("src/example4/animal.xml");
        Element root=document.getRootElement();
        //得到第一个cat元素
        Element cat1=root.element("cat");
        //在cat虾米那直接添加元素
        Element sex1=cat1.addElement("sex");
        //在sex下面添加文本
        sex1.setText("男");
        //回写xml

  //这是一个漂亮的格式,可以有缩进的效果
        OutputFormat format=OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/example4/animal.xml"), format);    
        xmlWriter.write(document);
        xmlWriter.close();
    }

//在特定位置添加新标签,在第二个cat标签之前添加<friend>丫丫</friend>
    public static void addNameBefore() throws Exception {
        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read("src/example4/animal.xml");
        Element root=document.getRootElement();
        List<Element> list=root.elements("cat");
        //创建元素使用
        Element friend=DocumentHelper.createElement("friend");
        friend.setText("丫丫");
        list.add(1, friend);
        //回写xml
        OutputFormat format=OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/example4/animal.xml"), format);
        xmlWriter.write(document);
        xmlWriter.close();
    }

//修改第一个cat下的<age>30</age>
    public static void modifyAge() throws Exception {
        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read("src/example4/animal.xml");
        Element root=document.getRootElement();
        Element cat1=root.element("cat");
        Element age=cat1.element("age");
        age.setText("30");
        OutputFormat format=OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter=new XMLWriter(new FileOutputStream("src/example4/animal.xml"), format);
        xmlWriter.write(document);
        xmlWriter.close();
    }

// 删除第一个cat下面的<fdeleteFriend()riend>丫丫</friend>
    public static void deleteFriend() throws Exception {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/example4/animal.xml");
        Element root = document.getRootElement();
        Element friend = root.element("friend");
        // 删除friend元素
        // 通过父元素来删除子元素
        //获取父节点
        //Element parent=friend.getParent();
        root.remove(friend);
        // 这是一个漂亮的格式,可以有缩进的效果
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/example4/animal.xml"), format);
        xmlWriter.write(document);
        xmlWriter.close();
    }

//获取第一个cat里面的属性的值
    public static void getValues() throws Exception {
        SAXReader saxreader = new SAXReader();
        Document document = saxreader.read("src/example4/animal.xml");
        Element root = document.getRootElement();
        Element cat = root.element("cat");
        //得到属性值
        String id1=cat.attributeValue("id1");
        System.out.println(id1);
    }

// 获取第二个name元素里的值
    public static void selectSecond() throws Exception {
        SAXReader saxreader=new SAXReader();
        Document document=saxreader.read("src/example4/animal.xml");
        Element root=document.getRootElement();
        List<Element> list=root.elements("cat");
        Element cat2=list.get(1);
        Element name2=cat2.element("name");
        String s=name2.getText();
        System.out.println(s);
    }

// 查询xml中所有name元素的值
        public static void selectName() throws Exception {
            // 创建解析器
            SAXReader saxreader = new SAXReader();
            //得到document对象
            Document document=saxreader.read("src/example4/animal.xml");
            //得到根节点
            Element root=document.getRootElement();
            //得到cat结点
            List<Element> list=root.elements("name");
            //得到cat元素下的name元素
            for (Element element: list) {
            //element是每一个cat元素
            //得到cat下面的name元素
            Element name1=element.element("name");
            String s=name1.getText();
            System.out.println(s);    
        }
    }
}

好文要顶 关注我 收藏该文

dom4j解析器sax解析xml文件的更多相关文章

  1. Dom4j解析和sax解析xml

    xml基础知识 1)标签对大小写敏感,2)xml解析方式有两种dom解析和sax解析  3)常用的解析工具有dom的dom4j和sax的sax解析工具 4)文档声明中使用<?xml versio ...

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

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

  3. Android XML文档解析(一)——SAX解析

    ---------------------------------------------------------------------------------------------------- ...

  4. 使用Dom解析器,操作XML里面的信息

    import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;impo ...

  5. XML解析(二) SAX解析

    XML解析之SAX解析: SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFactory.newSAXParser() 方 ...

  6. XML的概述,.Dom4解析和SAX解析

    1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) html(hyper text markup langauge) XML 是一种标记语言,很类似 H ...

  7. 死磕Spring之IoC篇 - 解析自定义标签(XML 文件)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  8. XML解析之SAX解析过程代码详解

    上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; impo ...

  9. 经典面试题:一张表区别DOM解析和SAX解析XML

                                                                                 ============DOM解析    vs ...

随机推荐

  1. 关于input 中 hidden属性在后台作用的实例

    在双模的项目中,我遇到了一个问题,我公司的双模项目是基于ECShop的框架,在完成订单列表的页面时,我写了两个form表单来单独传输数据,第一个表单是用来做搜素的,第二个表单是用来显示表单信息的,在控 ...

  2. 使用git版本管理工具

    1.(1)正常提交:git add 提交文件 git init   //git init之后建立一个.gitignore可以避免node_modules这类文件夹提交 git add . git co ...

  3. node.js-cancelled because Node.js is unresponsive

    今天初学node.js,但是在使用vs code 进行启动调试的时候出现了一个问题 这个报错,一开始我并不知道是什么意思.(而截至我写这个笔记我也还没了解清楚) 大概翻译出来的意思是说 “node.j ...

  4. javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

    赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...

  5. SELECT * FROM pet WHERE name REGEXP 'w';

    To find names containing a “w”, use this query: SELECT * FROM pet WHERE name REGEXP 'w';

  6. API 的历史

    原文出处: apievangelist   译文出处:灯下鼠 历史无处不在. 研究我们来自何方,有助于指引我们前行.科技的发展日新月异,但时常停一下匆忙的脚步,稍稍回顾一下历史,却总是有益的. 下面就 ...

  7. 一個新的面試題目,leetcode上面可以找到shortest palindrome

    記錄一下新的面試題目,其實題目是舊的,只是我才見到.以前研究過,只不過以前的解法不容易理解,現在有了新的遞歸解法.記錄一下. public String shortestPalindrome(Stri ...

  8. 通过 Powershell 来替换 ARM 模式下虚拟机的网络接口

    需求描述 客户在部署完 ARM 模式的虚拟机以后,由于误操作在虚拟机内部禁用了网卡导致远程访问虚拟机受到限制,以下是通过 Powershell 命令来替换原有虚拟网络接口实现虚拟网卡重置功能. Not ...

  9. Hive的运算和函数大全

    hive 常用运算 测试各种内置函数的快捷方法: 创建一个 dual 表 create table dual(id string); load 一个文件(只有一行内容:内容为一个空格)到 dual 表 ...

  10. ORACLE_ALIAS

    Oracle / PLSQL: ALIASES website:https://www.techonthenet.com/oracle/alias.php This Oracle tutorial e ...