黑马程序员技术交流社区
标题:
XPatch
[打印本页]
作者:
hejinzhong
时间:
2014-8-23 21:47
标题:
XPatch
本帖最后由 hejinzhong 于 2014-8-26 12:43 编辑
/**xpath就是选择XML文件中节点的方法。
(1)所谓节点(node),就是XML文件的最小构成单位,一共分成7种。
- element(元素节点)
- attribute(属性节点)
- text (文本节点)
- namespace (名称空间节点)
- processing-instruction (处理命令节点)
- comment (注释节点)
(2)xpath通过"路径表达式"(Path Expression)来选择节点。在形式上,"路径表达式"与传统的文件系统非常类似。
# 斜杠(/)作为路径内部的分割符。
# 同一个节点有绝对路径和相对路径两种写法。
# 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
# 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。
# "."表示当前节点。
# ".."表示当前节点的父节点
(3)选择节点的基本规则
- nodename(节点名称):表示选择该节点的所有子节点
- "/":表示选择根节点
- "//":表示选择任意位置的某个节点
- "@": 表示选择某个属性
*/
package com.heima;
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
import org.junit.*;
public class XPatch {
private Document dm;
/*Xpatch可以根据路径直接找到想要的节点
* 这种方式查找快速准确简洁
*/
@Before
public void getRoot() throws Exception{
SAXReader sr = new SAXReader();
dm = sr.read("src/book.xml");
}
// 获取某个节点
@Test
public void Test1(){
Node aNode = dm.selectSingleNode("/书架/书[1]/作者");
System.out.println(aNode.getText());
}
// 遍历所有元素节点
@Test
public void Test2(){
@SuppressWarnings("unchecked")
List<Node> list = dm.selectNodes("//*");
for (Node node : list) {
if(node.getNodeType()==1){
System.out.println(node.getName());
}
}
}
// 修改某个元素节点的主体内容
@Test
public void test3() {
Node sNode = dm.selectSingleNode("/书架/书[1]/售价");
sNode.setText("50");
XMLWriter();
}
// 向指定元素节点中增加子元素节点
@Test
public void test4() {
Node node = dm.selectSingleNode("/书架/书[1]/售价");
((Element)node).addElement("内部价").setText("20");
XMLWriter();
}
// 向指定元素节点上增加同级元素节点
@Test
public void test5() {
Node node = dm.selectSingleNode("/书架/书[1]");
((Element)node).addElement("批发价").setText("80");
XMLWriter();
}
// 删除指定元素节点
@Test
public void test6() {
Node node = dm.selectSingleNode("/书架/书[1]/售价/内部价");
node.getParent().remove(node);
XMLWriter();
}
// 操作XML文件属性
@Test
public void test7() {
Element node = (Element) dm.selectSingleNode("/书架/书[1]");
node.addAttribute("ISBN", "黑马程序员");
XMLWriter();
}
public void XMLWriter() {
try {
XMLWriter xw = new XMLWriter(new FileOutputStream("src/book.xml"),
OutputFormat.createPrettyPrint());
xw.write(dm);
xw.close();
} catch (Exception e) {
}
}
}
复制代码
作者:
天黑偷牛
时间:
2014-8-26 12:32
加油,加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2