dom4j中增删改查

package soft.lee.domain;

public class Dom4jDemo {

	public Dom4jDemo() {

	}

	/**
	 * 
	 * 建立一个XML文档,文档名由输入参数决定
	 * 
	 * @param filename
	 *            需建立的文件名
	 * 
	 * @return 返回操作结果, 0表失败, 1表成功
	 */

	public int createXMLFile(String filename) {

		/** 返回操作结果, 0表失败, 1表成功 */

		int returnValue = 0;

		/** 建立document对象 */

		Document document = DocumentHelper.createDocument();

		/** 建立XML文档的根books */

		Element booksElement = document.addElement("books");

		/** 加入一行注释 */

		booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");

		/** 加入第一个book节点 */

		Element bookElement = booksElement.addElement("book");

		/** 加入show参数内容 */

		bookElement.addAttribute("show", "yes");

		/** 加入title节点 */

		Element titleElement = bookElement.addElement("title");

		/** 为title设置内容 */

		titleElement.setText("Dom4j Tutorials");

		/** 类似的完成后两个book */

		bookElement = booksElement.addElement("book");

		bookElement.addAttribute("show", "yes");

		titleElement = bookElement.addElement("title");

		titleElement.setText("Lucene Studing");

		bookElement = booksElement.addElement("book");

		bookElement.addAttribute("show", "no");

		titleElement = bookElement.addElement("title");

		titleElement.setText("Lucene in Action");

		/** 加入owner节点 */

		Element ownerElement = booksElement.addElement("owner");

		ownerElement.setText("O'Reilly");

		try {

			/** 将document中的内容写入文件中 */
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("UTF-8");

			XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
					filename)), format);

			writer.write(document);

			writer.close();

			/** 执行成功,需返回1 */

			returnValue = 1;

		} catch (Exception ex) {

			ex.printStackTrace();

		}

		return returnValue;

	}

	/**
	 * 
	 * 修改XML文件中内容,并另存为一个新文件
	 * 
	 * 重点掌握dom4j中如何添加节点,修改节点,删除节点
	 * 
	 * @param filename
	 *            修改对象文件
	 * 
	 * @param newfilename
	 *            修改后另存为该文件
	 * 
	 * @return 返回操作结果, 0表失败, 1表成功
	 */

	public static int ModiXMLFile(String filename, String newfilename,
			ItemVo itemvo) {

		int returnValue = 0;

		try {

			SAXReader saxReader = new SAXReader();

			Document document = saxReader.read(new File(filename));

			/** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */

			List list = document.selectNodes("/bcaster/item/@id");
			Iterator iter = list.iterator();
			int length = 0;
			while (iter.hasNext()) {
				Attribute attribute = (Attribute) iter.next();
				if (attribute.getValue().equals(itemvo.getId())) {
					length = attribute.getParent().attributes().size();
					if (length > 2) {
						attribute.getParent().attribute(0)
								.setValue(itemvo.getItem_url());
						attribute.getParent().attribute(1)
								.setValue(itemvo.getLink());
						attribute.getParent().attribute(2)
								.setValue(itemvo.getId());
					} else {
						document.getRootElement().remove(attribute.getParent());
						Element emp1Element = DocumentHelper
								.createElement("item");
						emp1Element.addAttribute("item_url",
								itemvo.getItem_url());
						emp1Element.addAttribute("link", itemvo.getLink());
						emp1Element.addAttribute("id", itemvo.getId());
						emp1Element.addAttribute("titleName",
								itemvo.getTitleName());
						document.getRootElement().add(emp1Element);
					}
				}

			}

			try {

				/** 将document中的内容写入文件中 */
				OutputFormat format = OutputFormat.createPrettyPrint();
				format.setEncoding("UTF-8");

				XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
						newfilename)), format);

				writer.write(document);

				writer.close();

				/** 执行成功,需返回1 */
				Dom4jDemo.formatXMLFile(newfilename);

				returnValue = 1;

			} catch (Exception ex) {

				ex.printStackTrace();

			}

		} catch (Exception ex) {

			ex.printStackTrace();

		}

		return returnValue;

	}

	/******
	 * 更新xml文件中的属性
	 * 
	 * @param filename
	 * @param newfilename
	 * @param itemvo
	 * @return xml文件 ,节点位置 使用xPath比如://book[@type='society'],节点名称, 节点新值
	 * @return 返回操作结果, 0表失败, 1表成功
	 */
	public static int updateXMLFileAttribute(String filePathAndName,
			String newfilePathAndName, String noteXPath,
			String[] attributeName, String[] attributeValue) {
		try {
			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read(new File(filePathAndName));

			// 获取节点位置
			Element noteElement = (Element) document
					.selectSingleNode(noteXPath);

			if (attributeName != null && attributeValue != null
					&& attributeName.length == attributeValue.length) {
				for (int j = 0; j < attributeName.length; j++) {
					Attribute attribute = noteElement
							.attribute(attributeName[j]);
					// System.out.print("属性名:"+attribute.getName()+"  属性值:"+attribute.getValue());
					// 移除属性
					if (attribute != null) {
						noteElement.remove(attribute);
						noteElement.addAttribute(attributeName[j],
								attributeValue[j]);
					}
				}

			}

			/** 将document中的内容写入文件中 */
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("UTF-8");

			XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
					newfilePathAndName)), format);

			writer.write(document);

			writer.close();

			/** 执行成功,需返回1 */
			Dom4jDemo.formatXMLFile(newfilePathAndName);

			return 1;

		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return 0;
	}

	public static int deleteXMLFile(String filename, String newfilename,
			ItemVo itemvo) {

		int returnValue = 0;

		try {

			SAXReader saxReader = new SAXReader();

			Document document = saxReader.read(new File(filename));

			/** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */

			List list = document.selectNodes("/bcaster/item/@id");
			Iterator iter = list.iterator();
			while (iter.hasNext()) {
				Attribute attribute = (Attribute) iter.next();
				if (attribute.getValue().equals(itemvo.getId())) {
					document.getRootElement().remove(attribute.getParent());
				}

			}
			try {

				/** 将document中的内容写入文件中 */
				OutputFormat format = OutputFormat.createPrettyPrint();
				format.setEncoding("UTF-8");
				XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
						newfilename)), format);
				writer.write(document);

				writer.close();

				/** 执行成功,需返回1 */
				Dom4jDemo.formatXMLFile(filename);

				returnValue = 1;

			} catch (Exception ex) {

				ex.printStackTrace();

			}

		} catch (Exception ex) {

			ex.printStackTrace();

		}

		return returnValue;

	}

	public static int addXMLFile(String filename, String newfilename,
			ItemVo itemvo) {

		int returnValue = 0;

		try {

			SAXReader saxReader = new SAXReader();

			Document document = saxReader.read(new File(filename));

			// 添加员工节点 "employee"
			Element emp1Element = DocumentHelper.createElement("item");
			emp1Element.addAttribute("item_url", itemvo.getItem_url());
			emp1Element.addAttribute("link", itemvo.getLink());
			emp1Element.addAttribute("id", itemvo.getId());
			emp1Element.addAttribute("titleName", itemvo.getTitleName());
			document.getRootElement().add(emp1Element);

			try {

				/** 将document中的内容写入文件中 */
				OutputFormat format = OutputFormat.createPrettyPrint();
				format.setEncoding("UTF-8");
				XMLWriter writer = new XMLWriter(new FileOutputStream(new File(
						newfilename)), format);

				writer.write(document);

				writer.close();

				/** 执行成功,需返回1 */
				Dom4jDemo.formatXMLFile(filename);

				returnValue = 1;

			} catch (Exception ex) {

				ex.printStackTrace();

			}

		} catch (Exception ex) {

			ex.printStackTrace();

		}

		return returnValue;

	}

	public static List loadItemList(String filename) {

		List list = new ArrayList();

		try {

			SAXReader saxReader = new SAXReader();

			Document document = saxReader.read(new File(filename));

			List xmllist = document.selectNodes("/bcaster/item");
			for (int i = 0, n = xmllist.size(); i < n; i++)

			{
				ItemVo itemvo = new ItemVo();

				DefaultElement itemElement = (DefaultElement) xmllist.get(i);
				String item_url = itemElement.attributeValue("item_url");
				String link = itemElement.attributeValue("link");
				String id = itemElement.attributeValue("id");
				String titleName = itemElement.attributeValue("titleName");

				itemvo.setId(id);
				itemvo.setItem_url(item_url);
				itemvo.setLink(link);
				itemvo.setTitleName(titleName);
				list.add(itemvo);

				// System.out.println(item_url + "===========" + link);

			}

		} catch (Exception ex) {

			ex.printStackTrace();

		}

		return list;

	}

	/**
	 * 
	 * 格式化XML文档,并解决中文问题
	 * 
	 * @param filename
	 * 
	 * @return
	 */

	public static int formatXMLFile(String filename) {

		int returnValue = 0;

		try {

			SAXReader saxReader = new SAXReader();

			Document document = saxReader.read(new File(filename));

			XMLWriter output = null;

			/** 格式化输出,类型IE浏览一样 */

			OutputFormat format = OutputFormat.createPrettyPrint();

			/** 指定XML字符集编码 */

			format.setEncoding("UTF-8");

			output = new XMLWriter(new FileOutputStream(new File(filename)),
					format);

			output.write(document);

			output.close();

			/** 执行成功,需返回1 */

			returnValue = 1;

		} catch (Exception ex) {

			ex.printStackTrace();

		}

		return returnValue;

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值