码迷,mamicode.com
首页 > 其他好文 > 详细

XML学习总结-XPATH技术-(二)

时间:2016-08-14 10:09:04      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

XPATH技术

当使用dom4j查询比较深的层次结构的节点(标签,文本,属性)时,比较麻烦,所以出现了xpath技术

XPATH作用:用于快速获取所需节点对象

在dom4j中如何使用xPath技术

  1)导入xPath支持jar包 。  jaxen-1.1-beta-6.jar

  2)使用xpath方法

    List <Node>  selectNodes("xpath表达式");   查询多个节点对象

    Node       selectSingleNode("xpath表达式");  查询一个节点对象

xPath语法

      /      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)

      //     相对路径       表示不分任何层次结构的选择元素。

      *      通配符         表示匹配所有元素

      []      条件           表示选择什么条件下的元素

      @     属性            表示选择属性节点

      and     关系          表示条件的与关系(等价于&&)

      text()    文本           表示选择文本内容

 

删除指定的标签

package gz.itcast.b_xpath;

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * 第一个xpath程序
 * @author APPle
 *
 */
public class Demo1 {

	
	public static void main(String[] args) throws Exception{
		/**
		 * 需求: 删除id值为2的学生标签
		 */
		Document doc = new SAXReader().read(new File("e:/student.xml"));
		
		//1.查询id为2的学生标签
		//使用xpath技术
		Element stuElem = (Element)doc.selectSingleNode("//Student[@id=‘2‘]");

		//2.删除标签
		stuElem.detach();
		
		//3.写出xml文件
		FileOutputStream out = new FileOutputStream("e:/student.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
	}

}

 

package gz.itcast.b_xpath;

import java.io.File;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

/**
 * 学习xPath表达式语法
 * @author APPle
 *
 */
public class Demo2 {

	public static void main(String[] args) throws Exception {
		Document doc = new SAXReader().read(new File("./src/contact.xml"));
		
		String xpath = "";
		
		/**
		 * 1.  	/      绝对路径      表示从xml的根位置开始或子元素(一个层次结构)
		 */
		xpath = "/contactList";
		xpath = "/contactList/contact";
		
		/**
		 * 2. //     相对路径       表示不分任何层次结构的选择元素。
		 */
		xpath = "//contact/name";
		xpath = "//name";
		
		/**
		 * 3. *      通配符         表示匹配所有元素
		 */
		xpath = "/contactList/*"; //根标签contactList下的所有子标签
		xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构)
		
		/**
		 * 4. []      条件           表示选择什么条件下的元素
		 */
		//带有id属性的contact标签
		xpath = "//contact[@id]";
		//第二个的contact标签
		xpath = "//contact[2]";
		//选择最后一个contact标签
		xpath = "//contact[last()]";
		
		/**
		 * 5. @     属性            表示选择属性节点
		 */
		xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
		xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点
		xpath = "//contact[@id=‘002‘]";//选择id属性值为002的contact标签
		xpath = "//contact[@id=‘001‘ and @name=‘eric‘]";//选择id属性值为001,且name属性为eric的contact标签
		
		/**
		 *6.  text()   表示选择文本内容
		 */
		//选择name标签下的文本内容,返回Text对象
		xpath = "//name/text()";
		xpath = "//contact/name[text()=‘张三‘]";//选择姓名为张三的name标签
		
		
		List<Node> list = doc.selectNodes(xpath);
		for (Node node : list) {
			System.out.println(node);
		}
	}

}

  

读取xml文件模拟用户登录

package gz.itcast.b_xpath;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * xpath案例: 模拟用户登录效果
 * @author APPle
 *
 */
public class Demo3 {

	public static void main(String[] args)throws Exception{
		//1.获取用户输入的用户名和密码
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println("请输入用户名:");
		String name = br.readLine();
		
		System.out.println("请输入密码:");
		String password = br.readLine();
		
		//2.到“数据库”中查询是否有对应的用户
		//对应的用户:  在user.xml文件中找到一个
		   //name属性值为‘用户输入’,且password属性值为‘用户输入’的user标签
		Document doc = new SAXReader().read(new File("./src/user.xml"));
		Element userElem = (Element)doc.selectSingleNode("//user[@name=‘" +name +"‘ and @password=‘"+password+"‘]");
		
		if(userElem!=null){
			//登录成功
			System.out.println("登录成功");
		}else{
			//登录失败
			System.out.println("登录失败");
		}
	}

}

读取HTML文档内容

<html>
	<head>
		<title>通讯录</title>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
	</head>
	<body>
		<center><h1>通讯录</h1></center>
		<table border="1" align="center" id="contactForm">
			<thead>	
				<tr><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>地址</th><th>电话</th></tr>
			</thead>
			<tbody>
				<tr>
				<td>001</td>
				<td>张三</td>
				<td>男</td>
				<td>18</td>
				<td>广州市天河区</td>
				<td>134000000000</td>
				</tr>
				<tr>
				<td>002</td>
				<td>李四</td>
				<td>女</td>
				<td>20</td>
				<td>广州市越秀区</td>
				<td>13888888888</td>
				</tr>
				<tr>
				<td>002</td>
				<td>郭靖</td>
				<td>男</td>
				<td>30</td>
				<td>广州市番禺区</td>
				<td>1342214321</td>
				</tr>
			</tbody>
		</table>
	</body>
</html>

 

package gz.itcast.b_xpath;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * 使用xpath技术读取一个规范的html文档
 * @author APPle
 *
 */
public class Demo4 {

	public static void main(String[] args) throws Exception{
		Document doc = new SAXReader().read(new File("./src/personList.html"));
		//System.out.println(doc);
		
		//读取title标签
		Element titleElem = (Element)doc.selectSingleNode("//title");
		String title = titleElem.getText();
		System.out.println(title);
		
		/**
		 * 练习:读取联系人的所有信息
		 * 按照以下格式输出:
		 * 		 编号:001 姓名:张三 性别:男 年龄:18 地址:xxxx 电话: xxxx
		 *       编号:002 姓名:李四 性别:女 年龄:20 地址:xxxx 电话: xxxx
		 *       ......
		 */
		//1.读取出所有tbody中的tr标签
		List<Element> list = (List<Element>)doc.selectNodes("//tbody/tr");
		//2.遍历
		for (Element elem : list) {
			//编号
			//String id = ((Element)elem.elements().get(0)).getText();
			String id = elem.selectSingleNode("td[1]").getText();
			//姓名
			String name = ((Element)elem.elements().get(1)).getText();
			//性别
			String gender = ((Element)elem.elements().get(2)).getText();
			//年龄
			String age = ((Element)elem.elements().get(3)).getText();
			//地址
			String address = ((Element)elem.elements().get(4)).getText();
			//电话
			String phone = ((Element)elem.elements().get(5)).getText();
			
			System.out.println("编号:"+id+"\t姓名:"+name+"\t性别:"+
								gender+"\t年龄:"+
								age+"\t地址:"+address+
								"\t电话:"+phone);
		}
	}
}

 

XML学习总结-XPATH技术-(二)

标签:

原文地址:http://www.cnblogs.com/cxspace/p/5769483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!