XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<exam>
<student idcard="111" examid="222">
<name>张三</name>
<num>200</num>
<num>200</num>
<location>长沙</location>
<tel exe="0734">111222</tel>
<tel>123353453</tel>
</student>
<student idcard="333" examid="444">
<name>李四</name>
<location>衡阳</location>
<grade>98</grade>
<tel exe="0734">333444</tel>
<tel>你好333444</tel>
</student>
</exam>
操作代码:
public class Dom4jDemo {
@SuppressWarnings("unchecked")
public void readXml() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(Dom4jDemo.class.getClassLoader().getResourceAsStream("student.xml"));
// Document document = reader.read(new FileInputStream( new File("src/student.xml")));
// Document document = reader.read(new File("src/student.xml"));
// 获得XML文档的根节点
Element element = document.getRootElement();
// System.out.println(element.getName());
// 得到根节点的所有直接孩子接点
List<Element> elementList = element.elements();
for (Element ele : elementList) {
// 获得接点的属性
String idcard = ele.attributeValue("idcard");
String examid = ele.attributeValue("examid");
System.out.println(ele.getName() + ":" + "学号" + idcard + ";准考证号:" + examid);
// 获得每个子节点的子节点
List<Element> child = ele.elements();
for (Element elechild : child) {
// 获得子节点的文本值
String value = elechild.getText();
System.out.println(elechild.getName() + ":" + value);
}
}
}
/**
* 添加接点
*
* @throws Exception
*/
public void addNode() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/student.xml"));
//
Element rootElement = document.getRootElement();
List<Element> childElements = rootElement.elements();
for (Element element : childElements) {
String idcard = element.attributeValue("idcard");
String examid = element.attributeValue("examid");
// 创建新接点
Element newElement = DocumentHelper.createElement("tel");
// 为新节点设置文本值
newElement.setText("你好" + idcard + examid);
// newElement.setAttributeValue("exe", "0734");
element.add(newElement);
}
// 设置编码,FileWriter一直都是gb2312编码的,就算设置的编码格式还是会有乱码
// OutputFormat format = OutputFormat.createPrettyPrint();
// format.setEncoding("utf-8");
// 写入到新的XML文档里面去,更新XML文档
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("src/student.xml")));
writer.write(document);
writer.close();
System.out.println("over");
}
/**
* 删除接点
*
* @throws Exception
*/
public void delete() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/student.xml"));
Element grade = (Element) document.getRootElement().element("student").element("grade");
System.out.println(grade.getName());
//获得这个节点的父节点然后将其删除
grade.getParent().remove(grade);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/student.xml"), format);
writer.write(document);
writer.close();
}
/**
* 更新数据
*
* @param args
*/
public void update() throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/student.xml"));
Element price = (Element) document.getRootElement().element("student").elements("tel").get(1);
price.setText("123353453");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/student.xml"), format);
writer.write(document);
writer.close();
System.out.println("over");
}
/**
* 向指定位置插入节点
* @param args
*/
@SuppressWarnings("unchecked")
public void add2() throws Exception{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/student.xml"));
Element num = DocumentHelper.createElement("num");
num.setText("200");
List list = document.getRootElement().element("student").elements();
list.add(1, num);//在索引为一的位置插入这个节点
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileOutputStream("src/student.xml"),format);
writer.write(document);
writer.close();
System.out.println("over");
}
public static void main(String[] args) {
Dom4jDemo demo = new Dom4jDemo();
try {
demo.readXml();
// demo.addNode();
// demo.delete();
// demo.update();
// demo.add2();
} catch (Exception e) {
e.printStackTrace();
}
}
}