【JavaWeb】XML文件_使用xpath技术定位xml文件

使用XPath技术定位xml文件


1.xpath技术的作用:快速定位至某个节点对象(当xml层级关系结构很深的时候可以使用此技术解决)

2.在开发工具eclipse的项目中导入 jaxen-1.1-beta-6.jar 包,方法同dom4j工具包

3.xpath中常使用的两个方法:

(1)Node node = 文档对象/节点对象.selectSingleNode(“xpath…”);

(2)List<Node> list = 文档对象/节点对象.selectNodes(“xpath...”);


xpath语法

(1)/:在xml文件中表示绝对路径。如果一个斜线开头,选择的是根元素 例如:/AAA ,如果斜线在中间,表示根元素下的子元素 例如:/AAA/BBB

(2)//:在xml文件中表示一中不分层级关系,// 开头后面的元素出现了都要被选中 例如://contact

(3)*:表示通配符,选中所有的元素 例如:/AAA/BBB/*  表示AAA节点下的BBB元素所有的子节点全被选中

(4)[]:表示限定,进一步制定元素 例如://contact[1]  表示不分层级关系的选中第一个contact标签

(5)@:属性前添加的前缀 例如://contact[@id]  表示选中不分层级关系含有id属性的contact标签

(6)=:指定属性值或者是文本内容 例1://contact[@id='001'] 例2://name[text()='伊卡尔迪']

(7)and:表示逻辑关系“与”




练习1:xpath语法练习

import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Test1 {

	public static void main(String[] args) {
		try {
			// 获取文档对象
			Document doc = new SAXReader().read(new File("./src/contact.xml"));
			
			// 定义xpath
			String xpath="";
			xpath = "//name[text()='伊卡尔迪']";
			xpath = "//contact[@id='001' and @name='s1']";
			xpath = "//contact[last()]";		//调用last() 获取最后一个contact节点
			
			// 遍历
			List<Node> list = doc.selectNodes(xpath);
			if(list != null) {
				for(Node node:list) {
					System.out.println(node);
				}
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


练习2:使用xpath技术定位解析html文件

/*
 * 利用xpath技术定位解析html文件
 * */

import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Test2 {

	public static void main(String[] args) {
		try {
			// 读取FriendsList.html文件
			Document doc = new SAXReader().read(new File("./src/FriendsList.html"));

			// 获取tilte标题内容
			Element titleElement = (Element) doc.selectSingleNode("//title"); // 该方法返回的为Node类型,强转为Element类型
			System.out.println(titleElement.getText());// 获取title标签的文本内容

			// 获取table表格中的内容:
			/**
			 * 编号 姓名 性别 年龄 地址 电话 1 xx xx xx xxx xxx
			 */
			// 利用xpath定位到所有的tr节点对象
			List<Element> list = doc.selectNodes("//tbody/tr");
			System.out.println("编号\t姓名\t性别\t年龄\t地址\t\t电话");
			if (list != null) {
				// 遍历每一个tr节点对象
				for (Element e : list) {
					// 利用xpath获取文本内容
					String id = e.selectSingleNode("td[1]").getText();
					String name = e.selectSingleNode("td[2]").getText();
					String gender = e.selectSingleNode("td[3]").getText();
					String age = e.selectSingleNode("td[4]").getText();
					String address = e.selectSingleNode("td[5]").getText();
					String phone = e.selectSingleNode("td[6]").getText();

					System.out.println(id + "\t" + name + "\t" + gender + "\t" + age + "\t" + address + "\t\t" + phone);
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

效果:




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值