XML范例文件(NewFile.xml):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<toPhoneNumber>09876543219</toPhoneNumber>
<managerNumber>09876543219</managerNumber>
<smsStatus>false</smsStatus>
<telStatus>false</telStatus>
<connUrl>10.6.7.123:4321</connUrl>
</root>
主工具类:
import java.io.File;
import java.util.HashMap;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlHandlerUtil{
//根据文件路径加载为Document对象
public static Document loadDocument(String filename){
Document document = null;
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
document=builder.parse(new File(filename));
document.normalize();
}catch (Exception e){
e.printStackTrace();
}
return document;
}
//修改xml内容
public static void updateXmlMethod(String filename,HashMap paramMap){
if(paramMap != null){
Document document = loadDocument(filename);
//获得xml根节点
Node root = document.getDocumentElement();
if(root.hasChildNodes()){
NodeList chlidrenNodes = root.getChildNodes();
String setValue = null;
//遍历根下所有节点
for (int i=0;i<chlidrenNodes.getLength();i++){
Node subnode = chlidrenNodes.item(i);
if (subnode.getNodeName()=="toPhoneNumber"){
setValue = (String)paramMap.get("toPhoneNumber");
}else if(subnode.getNodeName()=="managerNumber"){
setValue = (String)paramMap.get("managerNumber");
}else if(subnode.getNodeName()=="smsStatus"){
setValue = (String)paramMap.get("smsStatus");
}else if(subnode.getNodeName()=="telStatus"){
setValue = (String)paramMap.get("telStatus");
}else if(subnode.getNodeName()=="connUrl"){
setValue = (String)paramMap.get("connUrl");
}
if(setValue != null && !"".equals(setValue)){
subnode.getFirstChild().setNodeValue(setValue);
}
setValue = null;
}
}
doc2XmlFile(document,filename);
}
}
// 生成新的xml文件
public static boolean doc2XmlFile(Document document,String filename){
boolean flag = true;
try{
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(filename));
transformer.transform(source, result);
}catch(Exception e){
flag = false;
e.printStackTrace();
}
return flag;
}
// 读取xml内容
public static void readXmlFile(String filename){
try{
ContentHandler handler = new ContentHandler();
SAXParserFactory saxparserfactory = SAXParserFactory.newInstance();
SAXParser saxparser = saxparserfactory.newSAXParser();
saxparser.parse(new File(filename), handler);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
SAX解析类:
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
//事件xml解析类
public class ContentHandler extends DefaultHandler {
private String preElement = null;
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if("toPhoneNumber".equals(preElement)){
System.out.println(new String(ch,start,length));
}else if("managerNumber".equals(preElement)){
System.out.println(new String(ch,start,length));
}else if("smsStatus".equals(preElement)){
System.out.println(new String(ch,start,length));
}else if("telStatus".equals(preElement)){
System.out.println(new String(ch,start,length));
}else if("connUrl".equals(preElement)){
System.out.println(new String(ch,start,length));
}
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
preElement = qName;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
preElement = null;
}
}
实用类:
import java.util.HashMap;
public class SAXUtil {
public static void main(String[] args) {
//修改
HashMap paramMap = new HashMap();
paramMap.put("toPhoneNumber", "09876543219");
paramMap.put("managerNumber", "09876543219");
paramMap.put("smsStatus", "false");
paramMap.put("telStatus", "false");
paramMap.put("connUrl", "10.6.7.123:4321");
XmlHandlerUtil.updateXmlMethod("NewFile.xml",paramMap);
//读取
XmlHandlerUtil.readXmlFile("NewFile.xml");
}
}