package com.metarnet.Execution.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* XML文件通用处理工具
* @author 程序员 闫帆
*/
public class XMLUtil {
private Document doc=null;
private File XMLFile;
protected static Logger logger=Logger.getLogger(XMLUtil.class);
public XMLUtil(File XMLFile){
this.XMLFile=XMLFile;
SAXReader saxReader = new SAXReader();
try {
doc=saxReader.read(XMLFile);
} catch (DocumentException exception) {
logger.error("不能读取指定的文件,请确认指定的文件为XML文件!>>>文件路径:"+XMLFile.getAbsolutePath());
createXML();
}
}
/**
* 根据文件路径获取实例(文件路径)
* @throws DocumentException
*/
public static XMLUtil getXML(String filepath)
{
XMLUtil util=new XMLUtil(new File(filepath));
return util;
}
/**
* 根据文件获取实例(File文件)
* @throws DocumentException
*/
public static XMLUtil getXML(File file)
{
XMLUtil util=new XMLUtil(file);
return util;
}
/**
* 获取到第一个匹配项并返回Node
*/
public Node SelectNode(String NodeName)
{
return doc.selectSingleNode(NodeName);
}
/**
* 获取到第一个匹配项并返回Element
*/
public Element SelectElement(String NodeName)
{
return (Element) doc.selectSingleNode(NodeName);
}
/**
* 获取第一个匹配节点的值
* 示例:
* <?xml version="1.0" encoding="UTF-8"?>
* <MyInfo>
* <Test>1</Test>
* </MyInfo>
*/
public String SelectNodeValue(String NodeName)
{
return SelectNode(NodeName).getText();
}
/**
* 获取第一个匹配节点的值
* 示例:
* <?xml version="1.0" encoding="UTF-8"?>
* <MyInfo>
* <Node>
* <Test>1</Test>
* </Node>
* </MyInfo>
*/
public String SelectNodeValue(String ElementName,String NodeName)
{
return SelectNode(ElementName).valueOf(NodeName);
}
/**
* 获取第一个匹配节点的值
* 示例:
* <?xml version="1.0" encoding="UTF-8"?>
* <MyInfo>
* <text comment="t1">t2</text>
* </MyInfo>
*/
public String SelectNodeString(String ElementName,String NodeName)
{
return SelectElement(ElementName).attribute(NodeName).getStringValue();
}
/**
* 添加节点
* 示例:
* <?xml version="1.0" encoding="UTF-8"?>
* <MyInfo>
* <text>t2</text>
* </MyInfo>
*/
public void addNode(String addNodeName,String addNodeString)
{
doc.getRootElement().addElement(addNodeName).addText(addNodeString);
Save();
}
/**
* 添加节点
* 示例:
* <?xml version="1.0" encoding="UTF-8"?>
* <MyInfo>
* <text>
* <text1>t2</text1>
* </text>
* </MyInfo>
*/
public void addNode(String ElementName,String addNodeName,String addNodeString)
{
SelectElement(ElementName).addElement(addNodeName).addText(addNodeString);
Save();
}
/**
* 添加节点
* 示例:
* <?xml version="1.0" encoding="UTF-8"?>
* <MyInfo>
* <name ID="123"/>
* </MyInfo>
*/
public void addNodeAttribute(String ElementName,String addNodeName,String addNodeString)
{
SelectElement(ElementName).addAttribute(addNodeName, addNodeString);
Save();
}
/**
* 删除节点(匹配到第一个节点)
*/
public void removeNode(String NodeName)
{
SelectNode(NodeName).getParent().remove(SelectNode(NodeName));
Save();
}
/**
* 删除节点
* (删除父节点下的节点)
*/
public void removeNode(String parentNode,String NodeName)
{
SelectElement(parentNode).remove(SelectNode(NodeName));
Save();
}
/**
* 修改节点值
*/
public void alterNode(String NodeName,String NewNodeString)
{
SelectNode(NodeName).setText(NewNodeString);
Save();
}
public void createXML()
{
doc = DocumentHelper.createDocument();
doc.addElement("Root");
Save();
}
/**
* 保存文件
* @throws IOException
*/
public void Save()
{
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GB2312");
XMLWriter write;
try {
write = new XMLWriter(new FileWriter(XMLFile),format);
write.write(doc);
write.close();
} catch (IOException e) {
logger.error("保存文件过程出现错误!",e);
}
}
}
以上代码可能新手朋友很难理解,粘贴上测试代码,仅供参考
package com.metarnet.Execution.test;
import org.apache.log4j.Logger;
import com.metarnet.Execution.util.XMLUtil;
public class TestXml {
public static final Logger logger=Logger.getLogger(TestTelnet.class);
public static void main(String[] args) {
XMLUtil util = XMLUtil.getXML("F:\\Test.xml");
util.createXML();
util.addNode("name", "闫帆");
util.addNode("Telephone", "18691090812");
util.addNodeAttribute("//name", "ID", "123");
System.out.println(util.SelectNodeValue("//name"));
System.out.println(util.SelectNodeString("//name", "ID"));
util.addNode("www", "Metar");
util.addNode("text", "闫帆");
util.addNode("//www","Telephone", "18691090812");
util.alterNode("//text", "修改测试");
System.out.println(util.SelectNodeValue("//www"));
util.removeNode("//Telephone");
util.removeNode("//text","//Telephone");
}
}
-----------------------------------程序员 闫帆原创---------------------------------------
转载请注明原创人信息 程序员 闫帆yanfanvip