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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值