概念:
dom4j介绍:dom4j是一个组织,针对于xml文档解析,提供dom4j解析器
dom4j并不是JavaSE的一部分,所有使用它需要倒入对应的jar包
得到document:
SEXReader reader = new SEXReader();
Document document = reader.read(url);
document的父接口是Node:如果document中的没有找到方法可以上Node中找
*document中的 getRootElement():获取根节点,返回的是Element
*Element是一个接口,它的父接口也是Node
-Element和Node的常用方法:
*getParent():获取父节点
*addElement():添加标签
使用dom4j查询xml
获取xml中name元素
1、创建解析器
2、得到document
3、getParent()方法得到根节点
4、得到所有student标签
*element(qName);
-表示获取标签下面的第一个子标签
-qName:标签的名称
*elements(qName);
-表示或取这个标签下面的子标签(孙标签除外)
-qName:标签的名称
*elements();
-表示获取标签下面的所有一层子标签
5、得到name标签
*element(qName);
-表示获取标签下面的第一个子标签
6、得到name标签中的值
*getText():获取标签文本内容
测试的xml:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<student id="hhh">
<name>张三</name>
<age>300</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</person>
java代码:
import java.io.FileOutputStream;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService;
import java.util.jar.Attributes.Name;
import javax.swing.RootPaneContainer;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 使用dom4j方法解析xml
* @author My World
*
*/
public class Dom4j_Text {
public static void main(String[] args) {
//selectAllName();
//selectFirstName();
//addSex();
//addAgeBefore();
//updateAge();
//deleteSchool();
getAttriburteValue();
}
private static void getAttriburteValue() {
try {
//创建解析器
SAXReader reader = new SAXReader();
//得到document
Document document = reader.read("src/dom4j/Person.xml");
//getRootElement()方法得到根节点
Element root = document.getRootElement();
//获得第一个student对象
Element s1 = root.element("student");
//获得s1属性值
String value = s1.attributeValue("id");
System.out.println("第一个student的id属性值:"+ value);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除某一个节点
*/
private static void deleteSchool() {
try {
//创建解析器
SAXReader reader = new SAXReader();
//得到document
Document document = reader.read("src/dom4j/Person.xml");
//getRootElement()方法得到根节点
Element root = document.getRootElement();
//获得第一个student对象
Element s1 = root.element("student");
//获得第一个Student的age元素
Element school =s1.element("school");
//通过父节点删除目标节点
s1.remove(school);
//回写
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 修改节点的值
*/
private static void updateAge() {
try {
//创建解析器
SAXReader reader = new SAXReader();
//得到document
Document document = reader.read("src/dom4j/Person.xml");
//getRootElement()方法得到根节点
Element root = document.getRootElement();
//获得第一个student对象
Element s1 = root.element("student");
//获得第一个Student的age元素
Element age =s1.element("age");
//修改age的值
age.setText("300");
//回写
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 在age的后面添加<school>标签
*/
private static void addAgeBefore(){
try {
//创建解析器
SAXReader reader = new SAXReader();
//得到document
Document document = reader.read("src/dom4j/Person.xml");
//getRootElement()方法得到根节点
Element root = document.getRootElement();
//获取到第一个student
Element s1 = root.element("student");
//获取student下面所有的元素
List<Element> list = s1.elements();
//在特定的位置添加元素
//--创建school标签
Element s = DocumentHelper.createElement("school");
s.setText("zzu");
//--在特定位置添加add();
list.add(1, s);
//回写xml
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void selectAllName() {
/**
* 获取xml中name元素
* 1、创建解析器
* 2、得到document
* 3、getRootElement()方法得到根节点
* 4、得到所有student标签
* 5、得到name标签
* 6、得到name标签中的值
*/
try {
//创建解析器
SAXReader reader = new SAXReader();
//得到document
Document document=reader.read("src/dom4j/Person.xml");
//获取根节点
Element root = document.getRootElement();
//获取所有的student标签
List<Element> list = root.elements();
//遍历List集合
for (Element student : list) {
//得到所有的student标签
//得到student下的name标签
Element name= student.element("name");
//得到name标签中的文本
String s = name.getText();
System.out.println(s);
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
/**
* 获取第一个student的name
*/
private static void selectFirstName() {
try {
SAXReader reader = new SAXReader();
Document document=reader.read("src/dom4j/Person.xml");
Element root = document.getRootElement();
Element student = root.element("student");
Element name = student.element("name");
String s = name.getText();
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 在第一个student下面添加<sex>nan</sex>
*/
private static void addSex() {
try {
SAXReader reader = new SAXReader();
Document document=reader.read("src/dom4j/Person.xml");
Element root = document.getRootElement();
Element student = root.element("student");
Element sex = student.addElement("sex");
sex.setText("nan");
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/dom4j/Person.xml"),outputFormat);
xmlWriter.write(document);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}