//1. 获取文件的输入流
FileInputStream fis = new FileInputStream("C:\\code\\35\\code1\\day03_XML\\src\\books.xml");
//2. 创建XML读取工具对象
SAXReader sr = new SAXReader();
//3. 通过读取工具, 读取XML文档的输入流 , 并得到文档对象
Document doc = sr.read(fis);
//4. 通过文档对象 , 获取文档的根节点对象
Element root = doc.getRootElement();
//5. 通过根节点, 获取所有子节点
List<Element> es = root.elements();
//6. 循环遍历三个book
for (Element e : es) {
//1. 获取id属性值
String id = e.attributeValue("id");
//2. 获取子节点name , 并获取它的内容
String name = e.element("name").getText();
//3. 获取子节点info , 并获取它的内容
String info = e.element("info").getText();
System.out.println("id=" id ",name=" name ",info=" info);
}
5.5 解析网络文件案例:
String phone = "18516955565";
//1. 获取到XML资源的输入流
URL url = new URL("http://apis./mobile/get? phone=" phone "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
//2. 创建一个XML读取对象
SAXReader sr = new SAXReader();
//3. 通过读取对象 读取XML数据,并返回文档对象
Document doc = sr.read(is);
//4. 获取根节点
Element root = doc.getRootElement();
//5. 解析内容
String code = root.elementText("resultcode"); if("200".equals(code)){
Element result = root.element("result");
String province = result.elementText("province");
String city = result.elementText("city");
if(province.equals(city)){
System.out.println("手机号码归属地为:" city);
}else{
System.out.println("手机号码归属地为:" province " " city); }
}else{
System.out.println("请输入正确的手机号码");
}
具体效果图就不运行了
6 DOM4J - XPATH解析XML
6.1 路径表达式
通过路径快速的查找一个或一组元素
路径表达式:
/ : 从根节点开始查找
// : 从发起查找的节点位置 查找后代节点 (常用)
. : 查找当前节点
.. : 查找父节点
@ : 选择属性. *
属性使用方式:
[@属性名='值']
[@属性名>'值']
[@属性名<'值']
[@属性名!='值']
举例
books: 路径: //book[@id='1']//name
books
book id=1
name
info
book id=2
name
info
6.2 使用步骤
通过Node类的两个方法, 来完成查找:
(Node是 Document 与 Element 的父接口)
方法1.
//根据路径表达式, 查找匹配的单个节点
Element e = selectSingleNode("路径表达式");
方法2.
List<Element> es = selectNodes("路径表达式");
1)本地解析
//案例
public class Demo {
public static void main(String[] args) throws IOException, DocumentException {
// 1,获取输入流
FileInputStream fis = new FileInputStream("D://Demo1.xml");
// 2,创建XML读取对象
SAXReader sr = new SAXReader();
// 3,读取并得到文档对象
Document doc = sr.read(fis);
// 4,通过文档对象 XPATH查找所有name节点
List<Node> data = doc.selectNodes("//name");
for(Node e : data) {
System.out.println(e.getName());
System.out.println(e.getText());
}
fis.close();
}
1)网络解析
public class Demo {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "18856266666"; // 非本人号码
// 1,获取到XML资源的输入流
URL url = new URL("http://apis./mobile/get? phone=" phone "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection(); // 打开链接
InputStream is = conn.getInputStream(); // 获得输入流
// 2,创建XML读取对象
SAXReader sr = new SAXReader();
// 3,通过读取对象,读取XML数据,并返回文档对象
Document doc = sr.read(is);
// 4,运营商
Node node = doc.selectSingleNode("//company");
System.out.println("运营商:" node.getText());
is.close();
}
}
7 Java生成XML (熟悉)
步骤:
1. 通过文档帮助器 (DocumentHelper) , 创建空的文档对象
Document doc = DocumentHelper.createDocument();
2. 通过文档对象, 向其中添加根节点
Element root = doc.addElement("根节点名称");
3. 通过根节点对象root , 丰富我们的子节点
Element e = root.addElement("元素名称");
4. 创建一个文件输出流 ,用于存储XML文件
FileOutputStream fos = new FileOutputStream("要存储的位置");
5. 将文件输出流, 转换为XML文档输出流
XMLWriter xw = new XMLWriter(fos);
6. 写出文档
xw.write(doc);
7. 释放资源
xw.close();
//案例
public static void main(String[] args) throws IOException, DocumentException {
// 1,通过文档帮助器,创建一个文档对象
Document doc = DocumentHelper.createDocument();
// 2,给文档添加一个节点
Element books = doc.addElement("books");
// 3,通过根节点丰富子节点
for(int i = 0; i < 100; i ) {
Element book = books.addElement("book");
Element name = book.addElement("name");
name.setText("第" i "个种苹果的小姑娘");
Element info = book.addElement("info");
info.setText("第" i "个种苹果的故事");
book.addAttribute("id", 100 i "");
}
// 4,创建一个文档输出流
FileOutputStream fos = new FileOutputStream("books.xml");// 工程所在目录创建文件
// 5,将输出流转换为XML输出流
XMLWriter xw = new XMLWriter(fos);
// 6,写出文档
xw.write(doc);
// 7,释放资源
fos.close();
System.out.println("执行完毕");
}