DOM4J解析XML
步骤:
1:导入dom4j.jar文件包
2: 创建一个指向XML文件的输入流
FileInputStream fis = new FileInputStream("xml文件的地址");
3. 创建一个XML读取工具对象
SAXReader sr = new SAXReader();
4. 使用读取工具对象, 读取XML文档的输入流 , 并得到文档对象
Document doc = sr.read(fis);
5. 通过文档对象, 获取XML文档中的根元素对象
Element root = doc.getRootElement()
Element root = doc.getRootElement()
实例:
//1:获取输入流
FileInputStream fis=new FileInputStream("I://pingguo.xml");
//2:创建XML读取对象
SAXReader sr=new SAXReader();
//3:读取并得到文档对象
Document doc = sr.read(fis);
//4:通过文档获取根元素
Element root = doc.getRootElement();
//开始解析元素
System.out.println(root.getName());//获取并打印根节点
Element ele = root.element("book");//通过element来去查找xml文件中所包含的book
Element name = ele.element("name");//因为是book的子节点,所以是ele.element("name"),因为是book下的
//System.out.println(ele.getText());
//System.out.println(name.getText());
List<Element> emt = root.elements();//先获取里面所有的子元素,然后通过for循环打印出来
for (int i = 0; i < emt.size(); i++) {
Element book = emt.get(i);
System.out.println(book.attributeValue("id")); //获取属性值,id
System.out.println(book.elementText("name")); //获取book里面name的值
System.out.println(book.elementText("info")); //获取book里面info的值
}
fis.close();
}
XPATH解析XML
路径表达式:
1. / :表示从根节点开始查找
2. // :表示从指定位置开始查找
3. . :表示从当前节点开始查找
4. .. :表示从父级节点开始查找
5. @ :表示选择属性
属性的使用方式:
[@属性名='值']
[@属性名>'值']
[@属性名<'值']
[@属性名!='值']
books 路径: //book[@id='1001']//name
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>
使用方法:
通过Node类的两个方法
(Node是Document和Element的父接口)
方法1.
//根据路径表达式, 查找匹配的单个节点
Element e = selectSingleNode("路径表达式");
方法2.
List es = selectNodes("路径表达式");
案例:
String phone = "18313935565";
//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. 通过读取对象 读取XML数据,并返回文档对象
Document doc = sr.read(is);
Node node = doc.selectSingleNode("//company");
System.out.println("运营商:"+node.getText());
is.close();