XML技术(四)

使用dom4j解析XML文档时,当文档的节点较为复杂,层级结构较深时,解析起来便显得有些麻烦。

这里引入一个xPath技术,可以快速获取所需的节点对象。

要想在dom4j中使用xPath,就要在项目中引入他的jar包,jaxen-*.jar

我们先来看一下xPath的语法:

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

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

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

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

      @            属性                  表示选择属性节点

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

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

下面看一下在Java代码中的使用

/**
 * 第一个xpath程序
 * @author YIPENG
 *
 */
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();
	}

}
/**
 * 学习xPath表达式语法
 * @author YIPNEG
 *
 */
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);
		}
	}

}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值