使用xPath技术快速获取指定节点并对其修改--(xPath技术基础)

xPath技术
    1、问题:当使用dom4j查询比较深的层次结构的节点、属性、标签、文本
    2、作用:用于快速获取所需的节点对象
    3、在dom4j中如何使用xPath技术
        1).导入xPath支持的jar包  jaxen-1.1-beta-6.jar
        2).使用xPath的方法
            List<Node> selectNodes("");查找多个节点对象
            Node selectSingleNode("xPath表达式");查找一个节点对象
    4、xPath的语法
                              取标签

        /              绝对路径  表示从XML的根位置开始或子元素
        //             相对路径  表示部分任何层次结构的选择结构
        *              通配符    表示匹配所有的元素
        [数字或函数]   条件      表示选择什么条件下的元素
        @              属性      表示选取属性节点
        and            关系      表示条件关系的与关系
        test()         文本      表示选择文本内容主程序:

xPath举例:

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);
		}
	}

}


 

package gz.itcast.a_dom4j_read;

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

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Demo_xPath {
	
	//使用xPath技术进行查询
	@Test
	public void test1() throws Exception {
		Document doc = new SAXReader().read(new File("f:/Student.xml"));
		String xPath = "//*";
		List<Node> list = doc.selectNodes(xPath);
		for(Node node : list) {
			System.out.println(node);
		}
	}
	
	public static void main(String[] args) throws Exception {
		/*
		 * 需求:删除id值为2的学生标签
		 */
		Document doc = new SAXReader().read(new File("f:/Student.xml"));
		//1.查询id为2的学生标签
		//使用xPath技术
		Element stuElem = (Element)doc.selectSingleNode("//Student[@id=2]");
		
		//2.删除标签
		stuElem.detach();
		
		FileOutputStream out = new FileOutputStream("f:/Student.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
	}
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值