Dom4J对XML文件增删改查(JAVA)--以及常见方法

XML

XML语言本身是一种数据以及数据说明的文本格式规范
因为数据传输的方式千奇百怪,为了数据之间传达的方便与统一,XML提供了一套数据存储、交换、表达的标准被用来结构化、存储以及传输信息

Dom4J

Dom4J是XML文件的API,可以在JAVA平台上对XML文件进行读写

XML格式

第一行必加,显示版本号和编码格式
PS:类似与HTML的格式有首位标签的模式。首标签内可以拥有属性,标签之间可以相互嵌套。
首尾标签之间填写内容。
在这里插入图片描述

增–add(demo)
public void add(){
		public Document document = null;
		// 获取文档的根结点元素标签
		Element rootElement = document.getRootElement();
		//为根结点元素标签添加子元素标签
		Element brand = rootElement.addElement("Brand");
		// 设置Brand的属性
		brand.addAttribute("name", "小米");
		// 为Brand标签添加子元素标签
		Element type = brand.addElement("Type");
		// 同理
		type.addAttribute("name", "CC");
		// 将其保存到指定位置
		this.saveXml("D:\\Phone.xml");
		}
删–delete(demo)
public void delete(){
		public Document document = null;
		// 假设文档对象里有,获取文档的根节点元素标签
		Element rootElement = document.getRootElement();
		// 获取根节点的迭代器
		Iterator iterator = rootElement.elementIterator();
		while (iterator.hasNext()){
			// 根节点下面的子节点若是与我们目标值相符
			Element brand = (Element)iterator.next();
			if (brand.attributeValue("name").equals("苹果")){
				// 获取父节点,通过父节点删除自己
				brand.getParent().remove(brand);
			}
		}
		this.saveXml("D:\\Phone.xml");
		}

改–update(demo)
public void update(){
		Element rootElement = document.getRootElement();
		Iterator iterator = rootElement.elementIterator();
		int id = 0;
		while (iterator.hasNext()){
			Element brand = (Element)iterator.next();
			id++;
			brand.addAttribute("id", id + "");
		}
		this.saveXml("D:\\Phone.xml");
	}

查–read(demo)
public void showInfo(){
		Element root = document.getRootElement();
		Iterator iterator = root.elementIterator();
		while (iterator.hasNext()){
			Element brand = (Element)iterator.next();
			System.out.println(brand.attributeValue("name"));

			Iterator types = brand.elementIterator();
			while (types.hasNext()){
				Element type = (Element)types.next();
				System.out.println(type.attributeValue("name"));

			}
		}
	}

加载XML–load(demo)
public void loadDocument(){
		try {
			SAXReader saxReader = new SAXReader();
			document = saxReader.read(new File("D:\\Phone2.xml"));
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
保存XML–save(load)
public void saveXml(String path){
		OutputFormat prettyPrint = OutputFormat.createPrettyPrint();
		prettyPrint.setEncoding("UTF-8");
		try {
			XMLWriter writer = new XMLWriter(new FileWriter(path), prettyPrint);
			writer.write(document);
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

对于一些常见的使用方法的小型API文档

Document: 文档对象
Element:  节点对象
Attribute:属性对象
 
   //用来载入xml文件的
   SAXReader reader = new SAXReader(); 
 
  	Document:属性对象
   //获取XML文档对象,同一个路径,两种写法
   Document document = reader.read("\\src\\myconfig.xml"); 
   Document document = reader.read("src/myconfig.xml");
 
   Element:属性对象
   //获取root(根)节点
   Element root=document.getRootElement(); 
   //获取节点下的所有子节点集合
   List<Element> classs=root.elements(); 
   //获取节点下名为“class”的子节点集合
   List<Element> classs=root.elements("class"); 
   //获取节点下名为show的子节点,如果节点下有多个show子节点,只获取第一个为show的子节点
   Element show=root.element("show");
   //获取节点下的Text值,(<show>这里排除节点外的就是text值</show>)
   String text=show.getText();
   //获取节点的名字
   String name=element.getName();
 
   Attribute:属性对象 
   //获取节点的所有属性对象集合
   List<Attribute> atts=show.attributes();
   //获取节点的名为name的属性对象
   Attribute att=show.attribute("name");
   //获取节点下指定属性名的值
   show.attributeValue("name");
   //获取属性对象的属性名
   String name=att.getName();
   //获取属性对象的属性值
   String value=att.getValue(); 


dom4j的XPath导航------需要另一个dom4j.jar包外另一个包:jaxen-1.1-beta-6.jar
 
    //获取单个节点,如果有多个,只会获取到第一个
   Element show=(Element) root.selectSingleNode("/school/show");
   //获取school下名为class的子节点集合
   List<Element> eles=root.selectNodes("/school/class");
   //获取指定节点的指定属性
   Attribute nameAtt=(Attribute)root.selectSingleNode("/school/class/group/@name");
 public void testCreateXml(){
                //创建了一个xml文档
                Document doc=DocumentHelper.createDocument();
                //添加注释
                doc.addComment("这里是注释");
                //创建了一个名为students节点,因为是第一个创建,所以是根节点,再通过doc创建一个则会报错。
                Element root=doc.addElement("students");
                //在root节点下创建一个名为student的节点
                Element stuEle=root.addElement("student");
                //给student节点添加属性
                stuEle.addAttribute("id", "1000");
                //给student节点添加一个子节点
                Element nameEle=stuEle.addElement("name");
                //设置子节点的文本
                nameEle.setText("张三");
                //用于格式化xml内容和设置头部标签
                OutputFormat format = OutputFormat.createPrettyPrint();
                //设置xml文档的编码为gbk
                format.setEncoding("gbk");
                Writer out;
                try {
                        //创建一个输出流对象
                        out=new FileWriter("src/qunhao.xml");
                        //创建一个dom4j创建xml的对象
                        XMLWriter writer = new XMLWriter(out, format);
                        //调用write方法将doc文档写到指定路径
            writer.write(doc);
            writer.close();
            System.out.print("生成XML文件成功");
                } catch (IOException e) {
                        System.out.print("生成XML文件失败");
                        e.printStackTrace();
                }
        }

还有一份英文API帮助文档
链接:https://pan.baidu.com/s/1lnNtWo1U9zVxiVGItv7JKQ
提取码:gyj1

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值