• DOM4j操作xml文件


    DOM4j解析xml文件

    		// 创建解析器
    		SAXReader reader = new SAXReader();
    		// 利用解析器读入xml文档
    		Document dom = reader.read(xmlFilePath);
    		// 获取文档的根节点
    		Element root = dom.getRootElement();



    DOM4j操作节点

    		// 1.取得某个节点的子节点.
    		Element node = root.element("书名");
    		// 获取节点为 "书名" 的集合
    		List elementList = root.elements("书名");
    		// 获取所有节点集合
    		// List elementList = root.elements();
    
    		// 2.获取节点的名字
    		node.getName();
    
    		// 3.设置节点的名字
    		node.setName("新名字");
    
    		// 4.取得节点的文字(标签体)
    		String text = node.getText();
    
    		// 5.设置节点的文字(标签体)
    		node.setText("aaa");
    
    		// 6.添加子节点.
    		Element ele = DocumentHelper.createElement("新节点");
    		node.add(ele);
    		ele.addElement("age");
    
    		// 7.删除子节点节点(父节点移除子节点)
    		// parentElm.remove(childElm);
    
    		// 8获取节点类型
    		node.getNodeType();
    
    		// 9.获取父节点
    		node.getParent();



    DOM4j操作属性

    		// 1.取得某节点对象的某属性
    		// 根据名称找属性
    		Attribute attr = ele.attribute("aaa");
    		// 根据索引找属性
    		// Attribute attr= ele.attribute(0);
    		List list = ele.attributes();
    		String value = ele.attributeValue("aaa");
    		Iterator it = ele.attributeIterator();
    
    		// 2.设置某节点的属性
    		ele.add(attr);
    		ele.addAttribute("新属性", "新属性值");
    		// 设置所有集合节点的属性
    		ele.setAttributes(list);
    
    		// 3.删除某属性
    		ele.remove(attr);
    
    		// 4.取得属性的名、值
    		String name = attr.getName();
    		String value = attr.getValue();
    
    		// 5.设置某属性的名、值
    		attr.setName("新名字");
    		attr.setValue("新值");


    DOM4j字符串和XML的转换

    		// 1.将字符串转化为XML
    		String text = "<members> <member>sitinspring</member></members>";
    		Document document = DocumentHelper.parseText(text);
    
    		// 2.将文档或节点的XML转化为字符串
    		String xmlStr = node.asXML();


    DOM4j将文档写入XML文件

    	/**
    	 * 将内存中的dom树会写到xml文件中,从而使xml中的数据进行更新
    	 * 
    	 * @param dom
    	 * @param savePath
    	 * @throws Exception
    	 */
    	public void WriteXML(Document dom, String savePath) throws Exception {
    		// 方式一
    		// 注意:FileWriter默认使用操作系统本地码表即gb2312编码,并且无法更改。
    		// 此时可以使用OutputStreamWriter(FileOutputStream("filePath"),"utf-8");的方式自己封装一个指定码表的Writer使用,从而解决乱码问题。
    		// FileWriter writer = new FileWriter("book.xml");
    		// dom.write(writer);
    		// writer.flush();
    		// writer.close();
    
    		
    		
    		// 方式二
    		// 注意:使用这种方式输出时,XMLWriter首先会将内存中的docuemnt翻译成UTF-8格式的document,在进行输出,这时有可能出现乱码问题。
    		// 可以使用OutputFormat 指定XMLWriter转换的编码为其他编码。
    		OutputFormat format = OutputFormat.createPrettyPrint();
    		format.setEncoding("GBK");
    		FileOutputStream fos = new FileOutputStream(savePath);
    		XMLWriter writer = new XMLWriter(fos, format);
    		writer.write(dom);
    		writer.close();
    	}


    综合例子

    	/**
    	 * 新增一个节点
    	 * 
    	 * @param xmlFilePath
    	 * @throws Exception
    	 */
    	public void AddDom(String xmlFilePath) throws Exception {
    		// 创建解析器
    		SAXReader reader = new SAXReader();
    		// 利用解析器读入xml文档
    		Document dom = reader.read(xmlFilePath);
    		// 获取文档的根节点
    		Element root = dom.getRootElement();
    		// 凭空创建<特价>节点,设置标签体
    		Element element = CreateElement("特价", "40.0元");
    		// 获取父标签<书>将特价节点挂载上去
    		// root.add(element);
    		root.element("书").element("特价").add(element);
    
    		WriteXML(dom, xmlFilePath);
    	}
    
    	/**
    	 * 创建一个XML 节点
    	 * 
    	 * @param elementNmae
    	 *            节点名称
    	 * @param elementValue
    	 *            节点值
    	 * @return
    	 */
    	public Element CreateElement(String elementNmae, String elementValue) {
    		Element element = DocumentHelper.createElement(elementNmae);
    		element.setText(elementValue);
    		return element;
    	}
    	
    	
    	
    	
    
    	/**
    	 * 修改一个节点值
    	 * 
    	 * @param xmlFilePath
    	 * @throws Exception
    	 */
    	public void updateDom(String xmlFilePath) throws Exception {
    		SAXReader reader = new SAXReader();
    		Document dom = reader.read(xmlFilePath);
    		Element root = dom.getRootElement();
    
    		root.element("书").element("特价").setText("4.0元");
    
    		WriteXML(dom, xmlFilePath);
    	}
    	
    	
    	
    
    	/**
    	 * 删除指定节点
    	 * 
    	 * @param xmlFilePath
    	 * @throws Exception
    	 */
    	public void deleteDom(String xmlFilePath) throws Exception {
    		SAXReader reader = new SAXReader();
    		Document dom = reader.read(xmlFilePath);
    		Element root = dom.getRootElement();
    
    		DeleteDom(root.element("书"), "特价");
    
    		WriteXML(dom, xmlFilePath);
    	}
    
    	/**
    	 * 删除指定节点
    	 * 
    	 * @param parentDom
    	 *            要删除的节点的上一级节点
    	 * @param elementName
    	 *            要删除的节点名称
    	 */
    	public void DeleteDom(Element parentDom, String elementName) {
    		Element price2Ele = parentDom.element(elementName);
    		price2Ele.getParent().remove(price2Ele);
    	}
    	
    	
    	
    
    	/**
    	 * 查找指定节点值
    	 * 
    	 * @param xmlFilePath
    	 * @throws Exception
    	 * 
    	 */
    	public String FindDom(String xmlFilePath) throws Exception {
    		SAXReader reader = new SAXReader();
    		Document dom = reader.read(xmlFilePath);
    		Element root = dom.getRootElement();
    
    		List<Element> list = root.elements();
    		Element book2Ele = list.get(1);
    		String text = book2Ele.element("书名").getText();
    		System.out.println(text);
    
    		return text;
    	}
    	
    	
    	
    
    	/**
    	 * 操作Dom节点属性
    	 * 
    	 * @throws Exception
    	 */
    	public void HandleDomAttr(String xmlFilePath) throws Exception {
    		SAXReader reader = new SAXReader();
    		Document dom = reader.read(xmlFilePath);
    		Element root = dom.getRootElement();
    
    		Element bookEle = root.element("书");
    		// bookEle.addAttribute("出版社", "传智出版社");//增加属性
    		// String str = bookEle.attributeValue("出版社");//修改属性
    		// 删除属性
    		DeleteElementAttr(bookEle, "出版社");
    
    		WriteXML(dom, xmlFilePath);
    	}
    
    	/**
    	 * 删除节点属性
    	 * 
    	 * @param element
    	 */
    	public void DeleteElementAttr(Element element, String attrName) {
    		Attribute attr = element.attribute(attrName);
    		attr.getParent().remove(attr);
    	}


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    没有纳入spring管理的类如何注入spring管理的对象
    Servlet里面url-pattern的通配符*的使用规则
    【转】request和response的页面跳转传参
    Mybatis-Generator逆向生成Po,Mapper,XMLMAPPER(一)
    Sae上传war包找不到编译文件
    Maven配置中scope说明
    Spring配置中的classpath和classpath*的区别
    国内的ntp服务器
    U盘拷贝文件大小有限制吗?
    Genymotion安装教程
  • 原文地址:https://www.cnblogs.com/ful1021/p/4804320.html
Copyright © 2020-2023  润新知