XML 本地文件和网络文件的解析(DOM4J 解析)

该博客介绍了如何使用DOM4J库解析XML文件,包括从本地和网络读取XML数据。首先展示了创建XML文档的示例,然后详细解释了DOM4J的使用步骤,如获取文档对象、元素对象、读取和设置节点内容、获取属性值等。在本地文件解析案例中,解析了一个书籍信息的XML文档,输出了根节点名称及书籍详情。在网络文件解析案例中,从Juhe API获取手机归属地信息,展示了解析后的省份和城市信息。
摘要由CSDN通过智能技术生成

DOM4J 解析XML

步骤:

  1. 引入jar 文件 dom4j.jar

  2. 创建一个指向XML文件的输入流

    ​ FileInputStream fis = new FileInputStream(“xml 文件的地址”);

    1. 创建一个xml读取工具对象

    ​ SAXReader sr = new SAXReader();

    1. 使用读取工具对象,读取xml文档的输入流,并得到文档对象

    ​ Document doc = sr.read(fis);

    1. 通过文档对象,获取xml对象中的根元素对象

    ​ Element root = doc.getRootElement();

文档对象Document

指的是加载到内存的整个xml文档

常用方法:

  1. 通过文档对象,获取xml文档中的根元素对象。

    ​ Element root = doc.getRootElement();

  2. 添加根节点。

    ​ Element root = doc.addElement(“根节点名称”);

元素对象 Element

指的是xml文档中的单个节点

常用方法:

  1. 获取节点名称

    ​ String getName();

  2. 获取节点内容

    ​ String getText();

  3. 设置节点内容

​	String setText();
  1. 根据子节点名称,获取匹配名称的第一个子节点对象
​	Element element(String 子节点名称);
  1. 获取所有的子节点对象
​	List<Element> elements();
  1. 获取节点的属性值
​	String attributeValue(String 属性名称);
  1. 获取子节点的内容
​	String elementText(String 子节点名称);
  1. 添加子节点
​	Element addElement(String 子节点名称);
  1. 添加属性
​	Void addAttribute(String 属性名,String 属性值)

解析本地文件案例

首先需要创建一个xml 文档

如下

// 这个是Demo1.xml 文档内容
<?xml version="1.0" encoding="UTF-8"?>
    <books>
    	<book id="1001">
    		<name>金苹果</name>
    		<info>河神曰:你掉的苹果是这个金苹果吗?</info>
        </book>
        <book id="1002">
            <name>银苹果</name>
            <info>河神曰:你掉的苹果是这个银苹果吗?</info>
        </book>
    </books>            
还需要导入jar文件 dom4j.jar 文件

下面开始编写

package 本地;

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

import javax.print.attribute.standard.DocumentName;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

/**
 * @program: 编程区
 * @description:  解析本地的 Demo1.xml 文件
 * @author: 白嫖怪AE
 * @create: 2021-11-26 14:41
 **/
public class xmlDemo1 {
    public static void main(String[] args) throws IOException, DocumentException {
        //1. 获取输入流
        FileInputStream fileInputStream = new FileInputStream("Demo1.xml");
        //2. 创建XML读取对象
        SAXReader saxReader = new SAXReader();
        //3. 读取并得到文档对象
        Document document = saxReader.read(fileInputStream);
        //4. 通过文档获取根元素
        Element rootElement = document.getRootElement();
        //5. 开始解析元素
        System.out.println(rootElement.getName());  // 把根节点名称打印出来

     // ----------      第 6 和 7 选择一种方式使用。6仅选择一个name 元素,显示其内容            ------------
        //6. 根据 root 根元素,去获取 book
        Element book = rootElement.element("book");
        Element name = book.element("name");
        System.out.println(name.getText());
        System.out.println("---------------------------");

        //7. for 循环取出 几本书
        // root 节点下的所有东西
        List<Element> elementsList = rootElement.elements();
        for (int i =0;i<elementsList.size();i++){  // 结合 xml 文档, elementList.size() 指 book的 个数
            Element book_element = elementsList.get(i);
            System.out.println(book_element.attributeValue("id"));
            System.out.println(book_element.elementText("name"));
            System.out.println(book_element.elementText("info"));
            System.out.println("===============我是分割线================");
        }

        fileInputStream.close();
    }
}
elementList 包含的内容

请添加图片描述


解析网络文件

这里用到的 XML资源来自 公共的API 接口地址

url = http://apis.juhe.cn/mobile/get?phone=18877778888&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253

phone 可以自定义,截图打开如下

请添加图片描述

下面是关于编写代码
package 网络文档;

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

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;

/**
 * @program: 编程区
 * @description:    解析网络文件
 * @author: 白嫖怪AE
 * @create: 2021-11-26 14:41
 **/
public class xmlDemo2 {
    public static void main(String[] args) throws IOException, DocumentException {
        String phone = "18877778888";
        //1. 获取到 XML 资源的输入流
        String url_xml = "http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253";
        URL url = new URL(url_xml);
        //2. 获取输入流
        URLConnection connection = url.openConnection();
        InputStream inputStream = connection.getInputStream();

        //3. 创建XML读取对象,通过读取对象读取XML 数据,并返回文档对象
        SAXReader saxReader = new SAXReader();
        //4. 读取并得到文档对象
        Document document = saxReader.read(inputStream);

        //5. 获取根节点对象
        Element root = document.getRootElement();

        //6. 解析内容
        String code = root.elementText("resultcode");
        if ("200".equals(code)){
            Element result = root.element("result");
            String province = result.elementText("province");
            String city = result.elementText("city");
            // 如果是直辖市,仅显示 city
            if (province.equals(city)){
                System.out.println("手机号码归属地为"+city);
            }else{
                System.out.println(province+" "+city);
            }
        }else{
            System.out.println("请输入正确的手机号码");
        }
    }
}

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值