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);
	}


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

原文地址:https://www.cnblogs.com/ful1021/p/4804320.html