问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!!
xPath作用:主要是用于快速获取所需的节点对象。
1)导入xPath支持jar包 。 jaxen-1.1-beta-6.jar(这个jar包在dom4j的压缩包中,位置:dom4j-1.6.1\lib\jaxen-1.1-beta-6.jar)
2)使用xpath方法
List selectNodes("xpath表达式"); 查询多个节点对象
Node selectSingleNode("xpath表达式"); 查询一个节点对象
| 符号 | 含义 | |
|---|---|---|
| / | 绝对路径 | 表示从xml的根位置开始或子元素(一个层次结构) |
| // | 相对路径 | 表示不分任何层次结构的选择元素。 |
| * | 通配符 | 表示匹配所有元素 |
| [] | 条件 | 表示选择什么条件下的元素 |
| @ | 属性 | 表示选择属性节点 |
| and | 关系 | 表示条件的与关系(等价于&&) |
| text() | 文本 | 表示选择文本内容 |
package com.rk.xml.i_xpath;
import org.dom4j.Document;
import org.dom4j.Node;
import com.rk.utils.Dom4jUtil;
/**
* 第一个示例
* @author RK
*
*/
public class Demo01
{
public static void main(String[] args)
{
/**
* 需求: 删除id值为“c002”的Cat标签
*/
Document doc = Dom4jUtil.openDocument("./src/animals.xml");
//1.查询id值为“c002”的Cat标签
//使用xpath技术
Node targetNode = doc.selectSingleNode("//Cat[@id=‘c002‘]");
//2.删除标签
targetNode.detach();
Dom4jUtil.saveDocument(doc, "D:/rk/result.xml");
System.out.println("执行结束!");
}
}package com.rk.xml.i_xpath;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import com.rk.utils.Dom4jUtil;
/**
* 学习xPath表达式语法
* @author RK
*
*/
public class Demo02
{
public static void main(String[] args)
{
String sourceXML = "./src/animals.xml";
String targetXML = "D:/rk/result.xml";
Document doc = Dom4jUtil.openDocument(sourceXML);
String xpath = "";
/**
* 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
*/
xpath = "/Animals";
xpath = "/Animals/Cat/Home";
/**
* 2. // 相对路径 表示不分任何层次结构的选择元素。
*/
xpath = "//Dog/Home";
xpath = "//Home";
/**
* 3. * 通配符 表示匹配所有元素
*/
xpath = "/Animals/*";//根标签Animals下的所有子标签
xpath = "/Animals//*";//根标签Animals下的所有标签(不分层次结构)
/**
* 4. [] 条件 表示选择什么条件下的元素
*/
xpath = "/Animals/Cat[2]";//第二个的Cat标签
xpath = "/Animals/*[last()]";//最后一个的Animals的子标签
xpath = "//*[@id]";//带有id属性的标签
/**
* 5. @ 属性 表示选择属性节点
*/
xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象
xpath = "//*[not(@id)]";//选择不包含id属性的标签节点
xpath = "//Cat[@id=‘c002‘]";//选择id属性值为c002的Cat标签
xpath = "//Cat[@id=‘c002‘ and @name=‘咪咪‘]";//选择id属性值为c002,且name属性为咪咪的Cat标签
/**
*6. text() 表示选择文本内容
*/
//选择Home标签下的文本内容,返回Text对象
xpath = "//Home/text()";
xpath = "//Cat/Home[text()=‘地球‘]";//选择Home为“地球”的Cat标签
@SuppressWarnings("unchecked")
List<Node> list = doc.selectNodes(xpath);
for(Node node : list)
{
System.out.println(node);
}
Dom4jUtil.saveDocument(doc, targetXML);
}
}原文地址:http://lsieun.blog.51cto.com/9210464/1773222