使用dom4j解析xml
dom4j,是一个组织,针对xml解析,提供解析器dom4j
dom4j不是jiacase的一部分,想要使用需要导入dom4j提供的jar包
得到document对象
SAXReader reader = new SAXReader();
Document document = reader.read(url);
document父接口是Node
document里面的方法 getRootElement(): 获取根节点 返回element
Element也是一个接口,父节点是Node
OutputFormat format = OutputFormat.createPrettyPrint():格式化xml文档
使用dom4j查询xml
1、创建解析器
2、得到document
3、得到根节点 getRootElement()
4、得到所有的p1标签
element(qName):表示获取标签下面的第一个子标签
elements(qName):获取标签下面为qName的子标签(一层)
elements():获取标签下面的所有子标签(一层)
5、得到p1下面的name
6、得到name里面的值
public static void selectName() throws Exception {
//创建解析器
SAXReader reader = new SAXReader();
//得到Document
Document document = reader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
//得到p1
List<Element> list = root.elements("p1");
//遍历list
for(Element element : list){
Element name1 = element.element("name");
String s = name1.getText();
System.out.println(s);
}
}
使用dom4j实现添加操作
在p1标签末尾添加一个元素
1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、在p1下面添加元素(使用addElement方法)
6、在添加完成之后的元素下面添加文本
7、回写xml
public static void addAge() throws Exception{
//创建解析器
SAXReader reader = new SAXReader();
//得到Document
Document document = reader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
// 得到p1
List<Element>p1 = root.elements("p1");
//添加节点
for(Element element : p1){
//添加元素
Element age1 = element.addElement("age");
//添加文本
age1.setText("22");
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
xmlWriter.write(document);
xmlWriter.close();
}
}
}
在特定标签前添加一个元素
1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、获取p1下面的所有元素(使用elements方法,返回list集合)
6、创建元素(DocumentHelper.createElement(qName);)
7、添加内容(school.setText(text);)
8、在指定位置添加(使用list内add(int index,E element)方法,index从0开始)
9、回写xml
public static void addAgeBefore() throws Exception{
//创建解析器
SAXReader reader = new SAXReader();
//得到Document
Document document = reader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
// 得到p1
List<Element>p1 = root.elements("p1");
//遍历节点
for(Element element : p1){
//得到子节点
List<Element>p2 = element.elements();
//创建元素(DocumentHelper)
Element school = DocumentHelper.createElement("shool");
//创建文本
school.setText("USTC");
//添加元素
p2.add(1,school);
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
xmlWriter.write(document);
xmlWriter.close();
}
}
修改节点内容
1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、得到p1下面的age元素
6、修改内容(age.setText(text);)
7、回写xml
public static void modifyAge() throws Exception{
//创建解析器
SAXReader reader = new SAXReader();
//得到Document
Document document = reader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
// 得到p1
List<Element>p1 = root.elements("p1");
//遍历节点
for(Element element : p1){
//选择age
Element age1 = element.element("age");
//修改文本
age1.setText("30");
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
xmlWriter.write(document);
xmlWriter.close();
}
}
//封装回写代码
public static void xmlWriters(String path,Document document) {
try {
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(path), format);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
删除节点
1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、得到p1下面的age元素
6、删除节点(p1.remove(age);)
7、回写xml
public static void delAge() throws Exception{
//创建解析器
SAXReader reader = new SAXReader();
//得到Document
Document document = reader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
// 得到p1
List<Element>p1 = root.elements("p1");
//遍历节点
for(Element element : p1){
//选择age
Element age1 = element.element("age");
//删除节点
boolean i = element.remove(age1);
System.out.println(i);
//回写xml
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/person.xml"),format);
xmlWriter.write(document);
xmlWriter.close();
}
}
获取属性的值
1、创建解析器
2、得到document
3、得到根节点
4、获取第一个p1(使用element方法)
5、得到p1的属性值
注:增加属性使用addAttribute("id2","www");
public static void getValue() throws Exception {
//创建解析器
SAXReader reader = new SAXReader();
//得到Document
Document document = reader.read("src/person.xml");
//得到根节点
Element root = document.getRootElement();
//得到p1
List<Element> list = root.elements("p1");
//遍历list
for(Element element : list){
//得到属性值
String value = element.attributeValue("id1");
System.out.println(value);
}
}