DOM4J 解析XML
步骤:
引入jar 文件 dom4j.jar
创建一个指向XML文件的输入流
FileInputStream fis = new FileInputStream(“xml 文件的地址”);
- 创建一个xml读取工具对象
SAXReader sr = new SAXReader();
- 使用读取工具对象,读取xml文档的输入流,并得到文档对象
Document doc = sr.read(fis);
- 通过文档对象,获取xml对象中的根元素对象
Element root = doc.getRootElement();
文档对象Document
指的是加载到内存的整个xml文档
常用方法:
通过文档对象,获取xml文档中的根元素对象。
Element root = doc.getRootElement();
添加根节点。
Element root = doc.addElement(“根节点名称”);
元素对象 Element
指的是xml文档中的单个节点
常用方法:
获取节点名称
String getName();
获取节点内容
String getText();
设置节点内容
String setText();
- 根据子节点名称,获取匹配名称的第一个子节点对象
Element element(String 子节点名称);
- 获取所有的子节点对象
List<Element> elements();
- 获取节点的属性值
String attributeValue(String 属性名称);
- 获取子节点的内容
String elementText(String 子节点名称);
- 添加子节点
Element addElement(String 子节点名称);
- 添加属性
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("请输入正确的手机号码");
}
}
}