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