/*
* 使用dom4j实现修改节点的操作
* 修改第一个head下面的age元素的值<age>30</age>
* 1、得到document
* 2、得到根节点 然后得到第一个head元素
* 3、得到第一个head下面的age
* element("")方法
* 4、修改值30
* 使用setText("文本内容")方法
* 5、回写xml
* 使用dom4j实现删除节点的操作
* 删除第一个head下面的titile元素
*
* 1、得到document
* 2、得到根节点
* 3、得到第一个head标签
* 4、得到第一个head下面的title元素
* 5、删除(使用head删除title)
* 得到school的父节点
* 第一种直接得到head
* 使用方法 getParent方法得到
* 删除操作
* 在head上面执行remove方法删除节点
* 6、回写xml
* 使用dom4j获取属性的操作
* 获取第一个head里面的属性id的值
* 步骤
* 1、得到document
* 2、得到根节点
* 3、得到第一个head元素
* 4、得到head里面的属性值
* attributeValue("id");
* 在head上面执行这个方法 里面的参数是属性名称
*
* 使用dom4j支持xpath的操作
* 可以直接获取到某个元素
* 第一种形式
* /aa/bb/cc 表示一层一层的 aa下面 bb下面的cc
* 第二种形式
* //bbb 表示和这个名称相同表示只要名称是bbb都得到
* 第三种形式
* /* 所有元素
* 第四种形式
* bbb[1] 表示第一个bbb元素
* bbb[last()] 表示最后一个bbb元素
* 第五种形式
* //bb[@id] 表示只要bb元素上面有id属性 都得到
* 第六种形式
* //bbb[@id='b1'] 表示元素名称是bbb 在bbb上面有id属性 并且id属性是b1
*/
public class TestDom4j02 {
public static String path = "src/ee/11.xml";
public static void main(String[] args) throws Exception {
//changeAge();
// deleteTitle();
getAttr();
}
//获取第一个head里面的属性 id的值
public static void getAttr() throws Exception {
/*
* 1、得到document
* 2、得到根节点
* 3、得到第一个head
* 4、得到head里面的属性值
*/
//得到document
Document document = domUtils.document(path);
//得到根节点
Element root = document.getRootElement();
//得到第一个head元素
Element head = root.element("head");
//得到head里面的属性值
String value = head.attributeValue("id");
System.out.println(value);
}
//删除第一个head下面的title元素
private static void deleteTitle() throws Exception {
/*
* 1、得到document
* 2、得到根节点
* 3、得到第一个head标签
* 4、得到第一个head下面的title元素
* 5、删除(使用head删除title
* 6、回写xml
*/
//得到document ctrl shift o 快速导包
Document document = domUtils.document(path);
//得到根节点
Element root = document.getRootElement();
//得到第一个head元素
Element head = root.element("head");
//得到head下面的title元素
Element title = head.element("title");
//删除title元素
//通过父节点删除
//获取父节点的方法 getParent()
// Element parent = title.getParent();
// parent.remove(title);
head.remove(title);
//回写xml
OutputFormat of = OutputFormat.createPrettyPrint();
XMLWriter xmlw = new XMLWriter(new FileOutputStream("2.xml"),of);
xmlw.write(document);
xmlw.close();
}
//修改第一个head下面的age元素的值<age>30</age>
private static void changeAge() throws Exception {
/*
* 1、得到document
* 2、得到根节点 然后得到第一个head元素
* 3、得到第一个head下面的age
* 4、修改值是30
* 5、回写xml
*/
//得到document
SAXReader saxr = new SAXReader();
Document document = saxr.read("src/ee/11.out.xml");
//得到根节点
Element root = document.getRootElement();
//得到第一个head
Element head = root.element("head");
//得到head下面的age
Element age = head.element("age");
//修改age的值
age.setText("33");
//回写xml
OutputFormat of = OutputFormat.createPrettyPrint();
XMLWriter xmlw = new XMLWriter(new FileOutputStream("1.xml"),of);
xmlw.write(document);
xmlw.close();
}
}
domutil
public class domUtils {
//java是强类型的语言 需要赋予类型
public static Document document(String path) throws Exception {
SAXReader saxr = new SAXReader();
Document document = saxr.read(path);
return document;
}
public static XMLWriter xmlw(String path) throws UnsupportedEncodingException, FileNotFoundException {
OutputFormat of = OutputFormat.createPrettyPrint();
XMLWriter xmlw = new XMLWriter(new FileOutputStream(path),of);
return xmlw;
}
}