首先先介绍一下方法
Document:代表文档对象
Element:节点对象
Attribute:属性
Text:文本
SAXReader:读取器
getRootElement():通过document对象获取该文档的根节点
Element addElement("名称"):添加特定节点 返回值是要被添加的节点
addAttribute("属性名","属性值"):为指定节点添加属性
elementIterator:子元素迭代器,返回Iterator对象
attributeValue("属性名")根据属性名获取属性值
addText:添加文本
remove():移除指定元素 属性....
getText:获取文本
dom4j:在操作其中的一个节点的同时,必须通过上一级节点进行操作.一定要获取根节点
dom4j.jar包链接:https://pan.baidu.com/s/1quJbnpGMKo-DIXn-kR98nA
提取码:shld
dom4j源码包:链接:https://pan.baidu.com/s/1H9QTrtsOZWPM24fWYA7RYQ
提取码:9dai
接下来写个简单的增删改查
先写一个XML <?xml version="1.0" encoding="GBK"?> <!-- 声明文档的版本和字符集 --> <!-- 描述手机实体 --> <phones> <!-- 整个文档的根节点root --> <phone id="001"> <brand>华为</brand> <type>P30 Pro</type> <price>5438元</price> <description>国人的骄傲,中华有为</description> </phone> <phone id="003"> <brand>小米</brand> <type>小米 Max3</type> <price>3000</price> <description>这是一款性价比很高的手机</description> </phone> </phones>
public class XMLDemo { Document document; //文档对象 public static void main(String[] args) throws Exception { XMLDemo demo=new XMLDemo(); demo.getDocument(); //demo.addElement(); //demo.deleteElement(); //demo.modityElement(); demo.getPhoneById("001"); demo.saveXML();//注意不管操作增删改查哪步操作都需要保存 也就是调用这个方法 } //1:获取文档对象 public void getDocument() throws Exception{ //创建SAX读取器 SAXReader reader=new SAXReader(); document=reader.read(this.getClass().getResourceAsStream("/phone.xml")); } //2:增加元素操作 public void addElement(){ //dom4j的特点:通过根节点操作其他的节点 Element root = document.getRootElement();//获取文档根元素 //增加手机节点 Element phone = root.addElement("phone"); //为phone节点绑定id属性 phone.addAttribute("id", "003"); //依次增加子节点 Element brand = phone.addElement("brand");//品牌 Element type = phone.addElement("type");//机型 Element price=phone.addElement("price"); Element description = phone.addElement("description");//描述 //设置文本值 brand.addText("小米"); type.addText("小米 Max3"); price.addText("3600"); description.addText("这是一款性价比很高的手机"); } //删除元素操作 public void deleteElement(){ Element root = document.getRootElement(); Iterator<Element> iter = root.elementIterator();//元素的迭代器 while(iter.hasNext()){ Element ele = iter.next(); if(ele.attributeValue("id").equals("002")){ //满足对应的元素属性的id值为002,则删除 root.remove(ele); break; } } } //修改元素操作 public void modityElement(){ Element root=document.getRootElement(); Iterator<Element> iter1 = root.elementIterator(); while(iter1.hasNext()){ Element element = iter1.next(); String id=element.attributeValue("id"); if(id.equals("003")){ Iterator<Element> iterator = element.elementIterator(); while(iterator.hasNext()){ Element ele = iterator.next(); if(ele.getName().equals("price")){ ele.setText("3000"); } } break; } } } //查询元素操作 根据Id查询手机信息 public void getPhoneById(String id){ Element root=document.getRootElement(); Iterator<Element> iterator = root.elementIterator(); while(iterator.hasNext()){ Element next = iterator.next(); if(next.attributeValue("id").equals(id)){ //phone Iterator<Element> subs = next.elementIterator(); //phone节点下的子节点 while(subs.hasNext()){ System.out.print(subs.next().getText()+" "); } break; } } } //保存操作 public void saveXML() throws IOException{ FileWriter fw=new FileWriter(new File("F:\MyEclipse Workspace\XML&JSON\resources\phone.xml")); OutputFormat format=OutputFormat.createPrettyPrint(); //设置字符集 format.setEncoding("GBK"); XMLWriter writer=new XMLWriter(fw,format); writer.write(document); writer.flush(); writer.close(); fw.close(); } }