Java解析xml

1. 什么是xml ?

xml快速入门

2. 导入依赖

本方案中使用DOM4J + xpath 解析xml文件

<!-- dom4j解析xml -->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>
<!-- xpath的依赖 -->
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.2.0</version>
        </dependency>

3. 案例文件

<?xml version="1.0" encoding="UTF-8"?>

<map-reduce>
  <jobName type="MR">测试MR参数使用</jobName>
  <jobPath>/opt/soft/cdp_job_jar/测试MR参数使用_20220505112618.jar</jobPath>
  <configuration/>
  <job>
    <setMapperClass>xx.xxx.xxxxxx.mr.TestMR</setMapperClass>
    <setOutputFormatClass>org.apache.hadoop.mapreduce.lib.output.TextOutputFormat</setOutputFormatClass>
    <setMapOutputValueClass>org.apache.hadoop.io.LongWritable</setMapOutputValueClass>
    <setMapOutputKeyClass>org.apache.hadoop.io.Text</setMapOutputKeyClass>
    <setInputFormatClass>org.apache.hadoop.mapreduce.lib.input.TextInputFormat</setInputFormatClass>
  </job>
  <input>/user/hdfs/rawdata/gn-20220411.log</input>
  <output>/user/hdfs/rawdata/test-mr-1</output>
</map-reduce>

4. 案例代码

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

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

/**
 * 解析xml的四种方式
 * 1. DOM(Document Object Model)  (JDK已经自带jar包,不需要额外导入!)
 * 2. Sax(Simple API for XML)  (JDK已经自带jar包,不需要额外导入!)
 * 3. DOM4J 解析 (需要导入依赖包) 推荐使用
 * 4. JDOM(Java-based Document Object Model)
 *
 * xpath
 * XPath 是一门在 XML 文档中查找信息的语言。
 * 使用路径表达式来选取 XML 文档中的节点或者节点集。
 * 这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
 *
 * 路径表达式
 * //节点名 选取指定节点 一般使用  selectSingleNode
 * /节点名/*  选取指定节点下面的所有子节点  一般使用selectNodes
 *
 */
public class 解析xml {
    // 使用DOM4J 结合 xpath 解析xml文件
    public static void main(String[] args) throws DocumentException {
        // 1. 创建SAXReader 用于读取加载xml文件
        SAXReader saxReader = new SAXReader();
        // 2. saxReader 读取xml文件
        Document document = saxReader.read(new File(解析xml.class.getClassLoader().getResource("testxml.xml").getPath()));

        // 3. 使用xpath获取值
        // 获取任务名  selectSingleNode 选取单个节点
        // 通配符 //节点名
        // 返回的是一个Node , 获取其中内容使用 getText方法
        Node jobNameNode = document.selectSingleNode("//jobName");
        String jobName = jobNameNode.getText();
        System.out.println("任务名称 : " + jobName);

        // 选取属性在节点对象上 使用 @属性名获取属性值
        String type = jobNameNode.selectSingleNode("@type").getText();
        System.out.println("任务类型 : " + type);

        // 获取jar包路径
        String jobPath = document.selectSingleNode("//jobPath").getText();
        System.out.println("任务jar包位置: " + jobPath);

        // 获取job的配置, selectNodes 获取多个节点信息, 是指选取指定节点下的子节点的内容
        List<Node> jobnodes = document.selectNodes("//job/*");
        for (Node jobnode : jobnodes) {
            System.out.println(jobnode.getText());
        }

        // 获取输入参数路径
        String input = document.selectSingleNode("//input").getText();
        System.out.println("输入文件路径 : " + input );

        // 获取输出参数路径
        String output = document.selectSingleNode("//output").getText();
        System.out.println("输出文件路径 : " + output);

    }
}

5. 解析结果

任务名称 : 测试MR参数使用
任务类型 : MR
任务jar包位置: /opt/soft/cdp_job_jar/测试MR参数使用_20220505112618.jar
xx.xxx.xxxxxx.mr.TestMR
org.apache.hadoop.mapreduce.lib.output.TextOutputFormat
org.apache.hadoop.io.LongWritable
org.apache.hadoop.io.Text
org.apache.hadoop.mapreduce.lib.input.TextInputFormat
输入文件路径 : /user/hdfs/rawdata/gn-20220411.log
输出文件路径 : /user/hdfs/rawdata/test-mr-1

欢迎大家留言一起讨论学习!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真香IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值