DOM4J-XPATH解析本地和网络xml文档
- xpath解析xml:通过路径快速查找到一个或一组元素节点
路径表达式
路径写法:
/:表示从根节点开始查找
- 比如获取所有name节点写法:/books//book//name或者/books//name
- 从根节点查找很少用,通常用//
//:直接查找后代节点(发起查找的节点就是根节点books)
比如获取所有name节点写法: //name即可
获取id为1节点book中的name节点写法://book[@id=‘1’]//name
xpath使用
DOM4J-XPATH解析本地xml文档
xml文档在当前项目的src下
<!--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>
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
/**
* 使用DOM4J-xpath解析器解析本地xml文件
* 需要导入dom4j-1.6.1.jar
*/
public class MainXML3 {
public static void main(String[] args) throws IOException, DocumentException {
//1.创建指向xml文件的输入流
FileInputStream fis = new FileInputStream("src/Demo1.xml");
//2.创建xml读取对象
SAXReader sr = new SAXReader();
//3.读取并得到文档对象(即读取xml文件转化为dom树)
Document doc = sr.read(fis);
//4.通过文档对象+xpath查询所有name节点
List <Node>names = doc.selectNodes("//name");//查询的结果是多个使用这个方法
for (int i = 0; i < names.size(); i++) {
//获取所有name节点名称和内容
System.out.println(names.get(i).getName());
System.out.println(names.get(i).getText());
}
//5.获取指定id的book节点中name节点
//查询结果只有一个节点使用这个方法
Node node = doc.selectSingleNode("//book[@id='1001']//name");
System.out.println(node.getName()+node.getText());
fis.close();
}
}
DOM4J-XPATH解析网络xml文档
导入DOM4J的jar包
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
/**
* -DOM4J-xpath解析网络xml文件
* 1.下面给出一个接口,通过传递手机号参数,传回一个xml文档描述这个手机号所属地
* 2.下面开始解析网络发来的xml文件,将其转为dom文档对象,并获取各个节点和内容。
*/
public class MainXML4 {
public static void main(String[] args) throws IOException, DocumentException {
String phone="18751902567";
//1.获取到xml资源的输入流
URL url=new URL("http://apis.juhe.cn/mobile/get?phone="+phone+"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection conn = url.openConnection();//打开连接
InputStream is = conn.getInputStream();//获取输入流
//2.创建xml读取对象
SAXReader sr = new SAXReader();
//3.通过读取对象sr,读取xml数据,并返回文档对象(dom树)
Document doc = sr.read(is);
//4.通过dom+xpath指定节点路径,获取指定节点
Node node = doc.selectSingleNode("//company");//获取xml文档中运营商节点
System.out.println("运营商:"+node.getText());
}
}