【insigma】以dom4j对xml文件操作

本文详细介绍了使用SAXReader读取XML文件,并通过XMLWriter写入XML文件的过程。此外,文章还展示了如何在XML文档中添加、删除、查找和更新book节点的相关操作。
public class XmlOperate {
	/**
	 * 通过 xml文件名 读取xml文件
	 * @param fileName xml文件名称
	 * @return Document 文档对象
	 * @throws DocumentException
	 */
	public Document readXMLDocument(String fileName) throws DocumentException
	{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(fileName));
		return document;
	}
	
	/**
	 * 根据 文件路径 和 xml文档对象 写入xml文件
	 * @param document 文档对象
	 * @param fileName xml文件名称
	 * @throws IOException
	 */
	public void writerXMLDocument(Document document,String fileName) throws IOException
	{
		FileWriter fileWriter = new FileWriter(fileName);
		XMLWriter writer = new XMLWriter(fileWriter, OutputFormat.createPrettyPrint());
		writer.write(document);
		writer.close();
	}
	
	/**
	 * 添加 book节点
	 * @param rootElement 根节点
	 * @param idValue id属性的值
	 */
	public void addBookNode(Element rootElement,String idValue)
	{
		//创建book节点
		Element bookElement = DocumentHelper.createElement("book");
		//添加 book节点中的 id属性
		bookElement.addAttribute("id", idValue);
		//创建title节点
		Element titleElement = DocumentHelper.createElement("title");
		//添加 title节点中的文本节点
		titleElement.addText("Learning XML");
		//创建author节点
		Element authorElement = DocumentHelper.createElement("author");
		//添加 author节点中的文本节点
		authorElement.addText("Lynn");
		//创建year节点
		Element yearElement = DocumentHelper.createElement("year");
		//添加 year节点中的文本节点
		yearElement.addText("2012");
		//创建price节点
		Element priceElement = DocumentHelper.createElement("price");
		//添加 price节点中的文本节点
		priceElement.addText("50.00");
		
		//在book节点依次添加 子节点 title author year price
		bookElement.add(titleElement);
		bookElement.add(authorElement);
		bookElement.add(yearElement);
		bookElement.add(priceElement);
		
		//在 根节点 bookstore中添加 book节点
		rootElement.add(bookElement);
	}
	
	/**
	 * 根据id的值 删除book节点
	 * @param rootElement 根节点
	 * @param idValue id属性的值
	 */
	public void removeBookNode(Element rootElement,String idValue)
	{
		//找到 要删除的book节点
		List<Element> elements = rootElement.selectNodes("//book");
		//遍历 book节点
		for (Element element : elements) {
			if(idValue.equals(element.attribute("id").getText()))
			{
				//从根节点 移除book元素
				rootElement.remove(element);
				break;
			}
		}
	}
	
	/**
	 * 根据book节点的id属性的值 来查找某个 book节点
	 * @param rootElement 根节点
	 * @param idValue id属性的值
	 * @return 找到的book节点 没有找到则返回null
	 */
	public Element findBookNodeById(Element rootElement,String idValue)
	{
		//找到 所有的book节点
		List<Element> elements = rootElement.selectNodes("//book");
		
		for (Element element : elements) {
			if(idValue.equals(element.attribute("id").getText()))
			{
				return element;
			}
		}
		return null;
	}
	
	/**
	 * 查找所有的book节点
	 * @param rootElement 根节点
	 * @return 返回所有的book节点
	 */
	public List<Element> findBooksNode(Element rootElement)
	{
		return rootElement.selectNodes("//book");
	}
	
	/**
	 * 更新 id属性所指定的值的book节点中的 title author year price 节点内容
	 * @param rootElement 根节点
	 * @param idValue id属性的值
	 * @param title title属性的值
	 * @param author author属性的值
	 * @param year year属性的值
	 * @param price price属性的值
	 */
	public void updateBookNode(Element rootElement,String idValue,String title,String author,String year,String price)
	{
		//找到 所有的book节点
		List<Element> elements = rootElement.selectNodes("//book");
		
		for (Element element : elements) {
			if(idValue.equals(element.attribute("id").getText()))
			{
				if(title != "")
				{
					element.element("title").setText(title);
				}
				if(author != "")
				{
					element.element("author").setText(author);
				}
				if(year != "")
				{
					element.element("year").setText(year);
				}
				if(price != "")
				{
					element.element("price").setText(price);
				}
				
				break;
			}
		}
	}
}

读取:SAXReader

写入:XMLWriter

创建元素:DocumentHelper.createElement

增加属性:Element.addAttribute

选择节点:rootElement.selectNodes("//book")

移除元素:rootElement.remove(element)

得到元素的文本:element.attribute("id").getText()

得到节点的文本:element.elementText("id")或者element.element("id").getText()

元素的下级元素设置文本:element.element("title").setText(title)

获取根元素:document.getRootElement()


   public HashMap<String, HashMap<String,String>> loadXML(String filename){
 	   SAXReader saxReader = new SAXReader();
 		try {
 			Document document = saxReader.read(new File(filename));
 			// 获取根结点
 			Element root = document.getRootElement();
 			// 用于记录bean的条数
 			// 遍历根结点(beans)的所有孩子节点(肯定是bean节点)
 			for (Iterator iter = root.elementIterator(); iter.hasNext();) {
 				Element element = (Element) iter.next();
 				Attribute idAttr = element.attribute("id");
 				String idName = idAttr.getValue();
 				Attribute classAttr = element.attribute("class");
 				String className = classAttr.getValue();
 				bean.put("class", className);
 				beans.put(idName, bean);
 			}
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 		return beans;
 		}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值