简单使用SAXReader解析xml数据

简单使用SAXReader解析xml数据之前的工作中,一直是使用json格式的数据进行数据传输。很少会接触到xml格式的数据。不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml。不过个人感觉,还是Json比较容易些啊,第一次解析xml时,我是一脸懵逼的,不过难者不会,会者不难,知道其中的原理和使用方法,其实发现xml也是很简单而且很强大的。简单的学习一下xml,在w3sch

大家好,又见面了,我是你们的朋友全栈君。

之前的工作中,一直是使用json格式的数据进行数据传输。很少会接触到xml格式的数据。不过因为工作需求,在对接其他产品的接口时,偶尔会遇到需要使用xml格式数据的情况,所以,也得学学如何解析xml。不过个人感觉,还是Json比较容易些啊,第一次解析xml时,我是一脸懵逼的,不过难者不会,会者不难,知道其中的原理和使用方法,其实发现xml也是很简单而且很强大的。
简单的学习一下xml,在w3school上看看就可以了:http://www.w3school.com.cn/xml/index.asp
看一下xml和Json之间的对比和差别,这篇博客写的还是很详细的:http://www.cnblogs.com/SanMaoSpace/p/3139186.html
知乎的这个问题也不错,学习学习涨姿势:https://www.zhihu.com/question/25636060
下面就说说怎么使用SAXReader来解析xml格式的数据吧。
首先当然是要导入dom4j的jar包了。我们来造一个测试用的xml文档,好像一般入门的测试数据都是这个book.xml,我们也拿这个来简单学习一下吧。
book.xml数据如下:
<books>
    <book>
        <author>Thomas</author>
        <title>Java从入门到放弃</title>
        <publisher>UCCU</publisher>
    </book>
    <book>
        <author>小白</author>
        <title>MySQL从删库到跑路</title>
        <publisher>Go Die</publisher>
    </book>
    <book>
        <author>PHPer</author>
        <title>Best PHP</title>
        <publisher>PHPchurch</publisher>
    </book>
</books>

我把book.xml放在D盘的根目录下,这样读取时能比较方便些……
下面是代码:
package com;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.List;

public class SAXReaderXML {
    public static void main(String[] args) throws Exception {
        SAXReader reader = new SAXReader();
        File xmlfile = new File("D:/books.xml");
        String xml = "<books><book><author>Thomas</author><title>Java从入门到放弃</title><publisher>UCCU</publisher>" +
                "</book><book><author>小白</author><title>MySQL从删库到跑路</title><publisher>GoDie</publisher></book>" +
                "<book><author>PHPer</author><title>BestPHP</title><publisher>PHPchurch</publisher></book></books>";
        Document fileDocument = reader.read(xmlfile);//从xml文件获取数据
        Document document = reader.read(new ByteArrayInputStream(xml.getBytes("utf-8")));//读取xml字符串,注意这里要转成输入流
        Element root = document.getRootElement();//获取根元素
        List<Element> childElements = root.elements();//获取当前元素下的全部子元素

        for (Element child : childElements) {//循环输出全部book的相关信息
            List<Element> books = child.elements();
            for (Element book : books) {
                String name = book.getName();//获取当前元素名
                String text = book.getText();//获取当前元素值
                System.out.println(name + ":" + text);
            }
        }
        //获取第二条书籍的信息
        Element book2 = childElements.get(1);
        Element author = book2.element("author");//根据元素名获取子元素
        Element title = book2.element("title");
        Element publisher = book2.element("publisher");
        System.out.println("作者:" + author.getText());//获取元素值
        System.out.println("书名:" + title.getText());
        System.out.println("出版社:"+publisher.getText());
    }
}

代码解析:

1、读取xml数据

SAXReader可以通过多种方式读取xml数据,并返回Document格式的对象。通过查看源码,可以看出read()方法接收File,InputStream和URL等格式的参数来读取相应的xml数据。在代码里我演示了读取xml文档和xml格式的字符串两种方式。当然,字符串要根据相应的编码转成输入流才能被SAXReader读取。

2、解析xml数据

读取到Document对象后,我们使用getRootElement()方法获取根元素,返回的是一个Element对象。在本例中,该元素的name即为books。

3、获取子元素数据

获取根元素后,便可以一层一层的去获取他的子元素信息。如果知道子元素的标签名称,便可以直接调用element(“name”)方法获取该子元素。如果不知道子元素的名称,或者想直接获取该元素下的全部子元素,可以调用elements()方法获取一个包括全部元素的list,然后进行下一步的处理。

4、输出元素信息

调用getName()方法获取当前元素的元素名,attributeValue()获取属性名。如果当前元素没有子元素,则调用getText()方法获取元素值。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157890.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月12日 下午6:00
下一篇 2022年7月12日 下午6:00


相关推荐

  • 计算机原码,反码,补码

    计算机原码,反码,补码最近花了点时间对计算机的原码 反码和补码进行了研究 对为什么要有反码和补码以及他们这么设计的原因有了一定的理解机器数一个数在计算机中的表现形式叫做机器数 这个数有正负之分 在计算机中用一个数的最高位 符号位 用来表示它的正负 其中 0 表示正数 1 表示负数 例如正数 7 在计算机中用一个 8 位的二进制数来表示 是 00000111 而负数 7 则用表示 这里的 00000111 和 1

    2026年3月18日
    2
  • spring batch 多个job(spring up)

    第四章配置作业Job4.1基本配置Job的配置有3个必须的属性,name,jobRepository,steps。一个简单的Job配置如下:

    2022年4月15日
    49
  • 背包问题九讲[转载][通俗易懂]

    背包问题九讲[转载][通俗易懂]背包问题九讲P01:01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转

    2022年7月12日
    31
  • ip addr命令作用_ipconfig命令的功能和作用

    ip addr命令作用_ipconfig命令的功能和作用一、ifconfig命令1)配置地址:比如修改eth0网卡的ip为192.168.174.100,子网掩码为255.255.255.0ifconfigeth0192.168.174.100/24使用ifconfig修改ip会直接在内存中生效,重启系统或者重启network服务就丢失。重启服务:Centos6:ser…

    2022年7月27日
    36
  • 一种新的满意度调查方法 NPS(net promoter score 净推荐值)

    一种新的满意度调查方法 NPS(net promoter score 净推荐值)r语言中计算NPS的包:https://cran.r-project.org/web/packages/NPS/index.html在企业与客户的互动中,最关键的环节就是有效地收集客户反馈,作为决策的依据。通常企业达成这一目标的做法,就是进行所谓“客户满意度调查”。不过,这种方法却有一个明显的缺陷,收集的信息太多又缺乏重点,结果是问的问题太多,很难从中获得正面的行动建议。这些…

    2022年6月8日
    36
  • 如何做SEO赚钱

    如何做SEO赚钱努力将自己的思绪拉回到 2015 年 5 月 笔者从某地产企业出来 正式开始了他的装修创业生涯 笔者是一个学金融出身的理工男 装修只是副业 去年上班时候看过一年工地只懂一点 其实是边干边学 笔者不是 SEO 技术男 不懂编程不会写代码 创业做的偏偏是互联网 装修 没有人脉 没有门店 没有业务员 没有设计师 没成本 在家穿着睡衣 一台电脑 一天 4 5 个小时就开始做网络营销 线下组织装修工人干起了装修 真的 SE

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号