java 操作XML

/**
 * 注意:需要导入dom4j-1.6.1.jar,jaxen-1.1-beta-6.jar 两个包
 *如果没有导入jaxen-1.1-beta-6.jar 这个包,则会报错:  java.lang.noclassdeffounderror: org/jaxen/jaxenexception 

 */
package jeelee.main;


import java.io.File;   
import java.io.FileWriter;   
import java.util.Iterator;   
import java.util.List;   
  
import org.dom4j.Attribute;   
import org.dom4j.Document;     
import org.dom4j.DocumentHelper;     
import org.dom4j.Element;    
import org.dom4j.io.OutputFormat;    
import org.dom4j.io.SAXReader;     
import org.dom4j.io.XMLWriter;   

/**  
 * 功能:对xml的操作
 * @author jeelee  
 */  

public class XMLOperation
{
	Document document = null ;
	Element rootElement = null,element = null;
	SAXReader saxReader = null ;
	List list = null ;
	Iterator iterator = null ; 
	Attribute attribute = null;
	
	/**
	*功能:构造函数,加载XML,创建Document
	*@param fileName,String 类型,XML文件名
	*@return 无
	*/
	public XMLOperation(String fileName) 
	{
		try
		{
			saxReader = new SAXReader();
			File file = new File(fileName);
			if(!file.exists())
			{
				System.out.println(fileName + " 文件不存在!");
			}
			document = saxReader.read(fileName);
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
	
	/**
	* 功能:获得根节点
	* @param fileName,String类型, XML文件名
	* @return Element 类型,返回根节点
	*/
	public Element getRootElement(String fileName)
	{
		Element rootElement = null ;
		try
		{
			SAXReader saxReader = new SAXReader() ;
			Document document = saxReader.read(new File(fileName));
			rootElement = document.getRootElement();
		}
		catch(Exception ex)
		{
			ex.printStackTrace();  
		}

		return rootElement ;
	}
	
	/**
	 * 功能:获得指定节点的值
	 * @param elementStr,String 类型, 指定的节点
	 * @return 无
	 */
	public String getElementValue(String elementStr)
	{
		String valueStr = "" ;
		
		list = document.selectNodes(elementStr);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			element = (Element)iterator.next();
			valueStr = element.getText();
		}
		
		return valueStr ;
	}
	/**
	 * 功能:获得指定节点的指定属性的值
	 * @param attribueStr,String 类型, 指定的节点
	 * @return 无
	 */
	public String getAttributeValue(String attribueStr)
	{
		String valueStr = "" ;
		
		list = document.selectNodes(attribueStr);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			Attribute attribute = (Attribute)iterator.next();
			valueStr = attribute.getValue();
		}
		
		return valueStr ;
	}
	/**
	 * 功能:设置指定节点的值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果
	 * @param elementStr, String 类型,指定的节点;
	 * @param valueStr String 类型
	 * @return 无
	 */
	public void setElementValue(String elementStr,String valueStr)
	{
		list = document.selectNodes(elementStr);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			element = (Element)iterator.next();
			element.setText(valueStr);
		}
	}
	/**
	 * 功能:设置指定节点的指定属性值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果
	 * @param attributeStr,String 类型,指定节点的指定属性
	 * @param attributeValue,String 类型,属性值
	 * @return 无
	 */
	public void setAttributeValue(String attributeStr,String attributeValue)
	{
		list = document.selectNodes(attributeStr);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			Attribute attribute = (Attribute)iterator.next();
			attribute.setValue(attributeValue);
		}
	}
	/**
	 * 功能:在指定的节点下增加一个子节点,并为其指定值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果
	 * @param parentElement,String 类型,指定的父节点
	 * @param childElementStr,String 类型,要增加的子节点
	 * @param elementValue,String 类型,新增子节点的值
	 * @return 无
	 */
	public void addElement(String parentElement,String childElementStr,String elementValue)
	{
		list = document.selectNodes(parentElement);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			element = (Element)iterator.next();
			Element childElement = element.addElement(childElementStr);
			childElement.setText(elementValue);
		}
	}
	/**
	 * 功能:在指定的节点中增加一个属性,并为其指定值,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果
	 * @param parentElement,String 类型,指定的父节点
	 * @param newAttribute,String 类型,要增加的属性
	 * @param attributeValue,String 类型,新增属性的值
	 * @return 无
	 */
	public void addAttribute(String element,String newAttribute,String attributeValue)
	{
		list = document.selectNodes(element);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			Element elem = (Element)iterator.next();
			Attribute attribute = (Attribute) elem.addAttribute(newAttribute, attributeValue);
		}
	}
	/**
	 * 功能:删除一个节点下的子节点,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果
	 * @param parentElement,String 类型,父节点
	 * @param childElement,String 类型,要删除的子节点
	 */
	public void deleteElement(String parentElement,String childElement)
	{
		list = document.selectNodes(parentElement);
		iterator = list.iterator();
		
		while(iterator.hasNext())
		{
			element = (Element)iterator.next();
			Iterator iter = element.elementIterator(childElement);
			while(iter.hasNext())
			{
				Element elem = (Element)iter.next();
				element.remove(elem);
			}
		}
	}
	
	/**
	 * 功能:删除一个节点的属性,调用此函数后需要调用writeXML(String fileName)函数以保存修改结果
	 * @param elementStr,String 类型,指定的节点;attributeStr,String 类型,指定要删除的属性
	 * @return 无
	 */
	public void deleteAttribute(String elementStr,String attributeStr)
	{
		list = document.selectNodes(elementStr);
		iterator = list.iterator();
		
		List lst = document.selectNodes(elementStr + "/@" + attributeStr);
		Iterator iter = null ;
		while(iterator.hasNext())
		{
			element = (Element)iterator.next();
			System.out.println("节点:"+element.getName());
			iter = lst.iterator();
			while(iter.hasNext())
			{
				attribute = (Attribute)iter.next();
				System.out.println("属性:"+attribute.getName());
				element.remove(attribute);
			}
		}
	}
	
	/**
	 * 功能:写入XML文件
	 * @param fileName,String 类型,要写入的XML文件
	 * @return returnValue,int 类型,1:表示写入成功,0:表示写入失败
	 */
	public int writeXML(String fileName)
	{
		int returnValue = 0 ;
		try
		{
			XMLWriter writer = new XMLWriter(new FileWriter(new File(fileName)));
			writer.write(document);
			writer.close();
			returnValue = 1 ;
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			returnValue = 0 ;
		}
		
		return returnValue ;
	}
	
	 /**  
     * 功能:格式化XML文档,并解决中文问题  
     * @param filename ,String 类型,要格式化的XML文件名 
     * @return  int
     */  
    public 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 FileWriter(new File(filename)),format);   
			output.write(document);   
			output.close();           
			/**执行成功,需返回1 */  
			returnValue = 1;          
		}
		catch(Exception ex)
		{
			ex.printStackTrace();  
		}
		return returnValue ;
	}

	/**
	* 作用:遍历 xml
	* @param element,Element 类型,指定遍历的节点
	* @return 无
	*/
	public void visitXML(Element element)
	{
		Iterator iter = element.elementIterator();
		while (iter.hasNext())
		{
			element = (Element)iter.next();
			Iterator iter2 = element.elementIterator();
			if (!iter2.hasNext())
			{
				System.out.println("节点:"+element.getName()+"节点值:"+element.getText());
			}
			
			visitXML(element);
		}
	}

}


XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<calendar> 
	<config> 
		<tiprate>12</tiprate>
		<tip>Y</tip>
		<autorun>N</autorun>
		<clock>3.swf</clock>
		<alpha>100</alpha>
		<winlocal>1</winlocal>
		<wintop>Y</wintop>
	</config> 
</calendar>

你可能感兴趣的:(java,xml,IE)