博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java操作Xml
阅读量:5304 次
发布时间:2019-06-14

本文共 14983 字,大约阅读时间需要 49 分钟。

一、创建DOM

1 XMLBuilder.java  2    3  用于创建DOM,Root结点  4    5 /********************************************************************  6  * 项目名称    :rochoc   

7 * 包名称 :rochoc.xml.oper

8 * 文件名称 :XmlBuilder

9 * 编写者 :luoc

10 * 编写日期 :2005-6-22

11 * 程序功能(类)描述 : 根据传入的XML文件生成Document和root结点

12 * 13 * 程序变更日期 : 14 * 变更作者 : 15 * 变更说明 : 16 ********************************************************************/ 17 package rochoc.xml.oper; 18 19 import java.io.File; 20 import java.io.IOException; 21 22 import javax.xml.parsers.DocumentBuilder; 23 import javax.xml.parsers.DocumentBuilderFactory; 24 import javax.xml.parsers.ParserConfigurationException; 25 26 import org.apache.log4j.Logger; 27 import org.w3c.dom.Document; 28 import org.w3c.dom.Element; 29 import org.xml.sax.SAXException; 30 31 /** 32 * 类名:XmlBuilder

33 * 类描述:根据传入的XML文件生成Document和root结点

34 * 编写者 :luoc

35 * 编写日期 :2005-6-22

36 * 主要public成员变量:

37 * 主要public方法:

38 **/ 39 40 public class XmlBuilder 41 { 42 /** 43 *构造函数说明:

44 *参数说明:@param path

45 **/ 46 public XmlBuilder(String path) 47 { 48 this.path=path; 49 init(); 50 } 51 52 /** 53 * 方法名称:init

54 * 方法功能:初始化函数

55 * 参数说明:

56 * 返回:void

57 * 作者:luoc 58 * 日期:2005-6-22 59 **/ 60 public void init() 61 { 62 buildDocument(); 63 buildRoot(); 64 } 65 66 /** 67 * 方法名称:buildDocument

68 * 方法功能:将XML文件生成Document

69 * 参数说明:

70 * 返回:void

71 * 作者:luoc 72 * 日期:2005-6-22 73 **/ 74 private void buildDocument() 75 { 76 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 77 try 78 { 79 DocumentBuilder builder=factory.newDocumentBuilder(); 80 logger.debug("Construct document builder success."); 81 doc=builder.parse(new File(path)); 82 logger.debug("Build xml document success."); 83 }catch(ParserConfigurationException e) 84 { 85 logger.error("Construct document builder error:"+e); 86 }catch(SAXException e) 87 { 88 logger.error("Parse xml file error:"+e); 89 }catch(IOException e) 90 { 91 logger.error("Read xml file error:"+e); 92 } 93 } 94 95 /** 96 * 方法名称:buildRoot

97 * 方法功能:生成XML的根结点

98 * 参数说明:

99 * 返回:void

100 * 作者:luoc101 * 日期:2005-6-22102 **/103 private void buildRoot()104 {105 root=doc.getDocumentElement();106 }107 108 /**109 * @return 返回 doc。110 */111 public Document getDoc()112 {113 return doc;114 }115 /**116 * @param doc 要设置的 doc。117 */118 public void setDoc(Document doc)119 {120 this.doc = doc;121 }122 /**123 * @return 返回 path。124 */125 public String getPath()126 {127 return path;128 }129 /**130 * @param path 要设置的 path。131 */132 public void setPath(String path)133 {134 this.path = path;135 }136 /**137 * @return 返回 root。138 */139 public Element getRoot()140 {141 return root;142 }143 /**144 * @param root 要设置的 root。145 */146 public void setRoot(Element root)147 {148 this.root = root;149 }150 /*全局变量*/151 private String path=null;//xml文件路径152 private Document doc=null;//xml文件对应的document153 private Element root=null;//xml文件的根结点154 private Logger logger=Logger.getLogger(getClass().getName());155 }

二、查找,插入,删除,修改

1 XmlOper.java  2    3  用于操作XML文件,包括查找、新增、删除、修改结点  4    5  /********************************************************************  6  * 项目名称    :rochoc   

7 * 包名称 :rochoc.xml.oper

8 * 文件名称 :XmlOper

9 * 编写者 :luoc

10 * 编写日期 :2005-6-22

11 * 程序功能(类)描述 : 对XML进行读写操作

12 * 13 * 程序变更日期 : 14 * 变更作者 : 15 * 变更说明 : 16 ********************************************************************/ 17 package rochoc.xml.oper; 18 19 import java.util.ArrayList; 20 21 import org.apache.log4j.Logger; 22 import org.w3c.dom.Document; 23 import org.w3c.dom.Element; 24 import org.w3c.dom.Node; 25 import org.w3c.dom.NodeList; 26 27 /** 28 * 类名:XmlOper

29 * 类描述:对XML文件进行读写操作,均为静态函数

30 * 编写者 :luoc

31 * 编写日期 :2005-6-22

32 * 主要public成员变量:

33 * 主要public方法:

34 **/ 35 36 public class XmlOper 37 { 38 /** 39 *构造函数说明:

40 *参数说明:

41 **/ 42 private XmlOper() 43 { 44 } 45 46 /** 47 * 方法名称:getNodeList

48 * 方法功能:获取父结点parent的所有子结点

49 * 参数说明:@param parent 50 * 参数说明:@return

51 * 返回:NodeList

52 * 作者:luoc 53 * 日期:2005-6-22 54 **/ 55 public static NodeList getNodeList(Element parent) 56 { 57 return parent.getChildNodes(); 58 } 59 60 /** 61 * 方法名称:getElementsByName

62 * 方法功能:在父结点中查询指定名称的结点集

63 * 参数说明:@param parent 64 * 参数说明:@param name 65 * 参数说明:@return

66 * 返回:Element[]

67 * 作者:luoc 68 * 日期:2005-6-22 69 **/ 70 public static Element [] getElementsByName(Element parent,String name) 71 { 72 ArrayList resList=new ArrayList(); 73 NodeList nl=getNodeList(parent); 74 for(int i=0;i

94 * 方法功能:获取指定Element的名称

95 * 参数说明:@param element 96 * 参数说明:@return

97 * 返回:String

98 * 作者:luoc 99 * 日期:2005-6-22100 **/101 public static String getElementName(Element element)102 {103 return element.getNodeName();104 }105 106 /**107 * 方法名称:getElementValue

108 * 方法功能:获取指定Element的值

109 * 参数说明:@param element110 * 参数说明:@return

111 * 返回:String

112 * 作者:luoc113 * 日期:2005-6-22114 **/115 public static String getElementValue(Element element)116 {117 NodeList nl=element.getChildNodes();118 for(int i=0;i

132 * 方法功能:获取指定Element的属性attr的值

133 * 参数说明:@param element134 * 参数说明:@param attr135 * 参数说明:@return

136 * 返回:String

137 * 作者:luoc138 * 日期:2005-6-22139 **/140 public static String getElementAttr(Element element,String attr)141 {142 return element.getAttribute(attr);143 }144 145 /**146 * 方法名称:setElementValue

147 * 方法功能:设置指定Element的值

148 * 参数说明:@param element149 * 参数说明:@param val

150 * 返回:void

151 * 作者:luoc152 * 日期:2005-6-22153 **/154 public static void setElementValue(Element element,String val)155 {156 Node node=element.getOwnerDocument().createTextNode(val);157 NodeList nl=element.getChildNodes();158 for(int i=0;i

174 * 方法功能:设置结点Element的属性

175 * 参数说明:@param element176 * 参数说明:@param attr177 * 参数说明:@param attrVal

178 * 返回:void

179 * 作者:luoc180 * 日期:2005-6-22181 **/182 public static void setElementAttr(Element element,183 String attr,String attrVal)184 {185 element.setAttribute(attr,attrVal);186 }187 188 189 /**190 * 方法名称:addElement

191 * 方法功能:在parent下增加结点child

192 * 参数说明:@param parent193 * 参数说明:@param child

194 * 返回:void

195 * 作者:luoc196 * 日期:2005-6-22197 **/198 public static void addElement(Element parent,Element child)199 {200 parent.appendChild(child);201 }202 203 /**204 * 方法名称:addElement

205 * 方法功能:在parent下增加字符串tagName生成的结点

206 * 参数说明:@param parent207 * 参数说明:@param tagName

208 * 返回:void

209 * 作者:luoc210 * 日期:2005-6-22211 **/212 public static void addElement(Element parent,String tagName)213 { 214 Document doc=parent.getOwnerDocument();215 Element child=doc.createElement(tagName);216 parent.appendChild(child);217 }218 219 /**220 * 方法名称:addElement

221 * 方法功能:在parent下增加tagName的Text结点,且值为text

222 * 参数说明:@param parent223 * 参数说明:@param tagName224 * 参数说明:@param text

225 * 返回:void

226 * 作者:luoc227 * 日期:2005-6-22228 **/229 public static void addElement(Element parent,String tagName,String text)230 {231 Document doc=parent.getOwnerDocument();232 Element child=doc.createElement(tagName);233 setElementValue(child,text);234 parent.appendChild(child);235 }236 237 /**238 * 方法名称:removeElement

239 * 方法功能:将父结点parent下的名称为tagName的结点移除

240 * 参数说明:@param parent241 * 参数说明:@param tagName

242 * 返回:void

243 * 作者:luoc244 * 日期:2005-6-22245 **/246 public static void removeElement(Element parent,String tagName)247 {248 logger.debug("remove "+parent.getNodeName()+"'s children by tagName "+tagName+" begin...");249 NodeList nl=parent.getChildNodes();250 for(int i=0;i

三、新建XML文件

1 XmlCreater.java  2    3  用于创建XML文件  4    5 /********************************************************************  6  * 项目名称    :rochoc   

7 * 包名称 :rochoc.xml.oper

8 * 文件名称 :XmlCreater

9 * 编写者 :luoc

10 * 编写日期 :2005-6-22

11 * 程序功能(类)描述 : 创建DOM并生成XML文件

12 * 13 * 程序变更日期 : 14 * 变更作者 : 15 * 变更说明 : 16 ********************************************************************/ 17 package rochoc.xml.oper; 18 19 import java.io.File; 20 21 import javax.xml.parsers.DocumentBuilder; 22 import javax.xml.parsers.DocumentBuilderFactory; 23 import javax.xml.parsers.ParserConfigurationException; 24 import javax.xml.transform.Transformer; 25 import javax.xml.transform.TransformerConfigurationException; 26 import javax.xml.transform.TransformerException; 27 import javax.xml.transform.TransformerFactory; 28 import javax.xml.transform.dom.DOMSource; 29 import javax.xml.transform.stream.StreamResult; 30 31 import org.apache.log4j.Logger; 32 import org.w3c.dom.Document; 33 import org.w3c.dom.Element; 34 35 /** 36 * 类名:XmlCreater

37 * 类描述: 创建DOM并生成XML文件

38 * 编写者 :luoc

39 * 编写日期 :2005-6-22

40 * 主要public成员变量:

41 * 主要public方法:

42 **/ 43 44 public class XmlCreater 45 { 46 /** 47 *构造函数说明:

48 *参数说明:@param path xml文件路径

49 **/ 50 public XmlCreater(String path) 51 { 52 this.path=path; 53 init(); 54 } 55 56 /** 57 * 方法名称:init

58 * 方法功能: 初始化函数

59 * 参数说明:

60 * 返回:void

61 * 作者:luoc 62 * 日期:2005-6-22 63 **/ 64 private void init() 65 { 66 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 67 try 68 { 69 DocumentBuilder builder=factory.newDocumentBuilder(); 70 doc=builder.newDocument();//新建DOM 71 }catch(ParserConfigurationException e) 72 { 73 logger.error("Parse DOM builder error:"+e); 74 } 75 } 76 77 /** 78 * 方法名称:createRootElement

79 * 方法功能:创建根结点,并返回

80 * 参数说明:@param rootTagName

81 * 返回:Element

82 * 作者:luoc 83 * 日期:2005-6-22 84 **/ 85 public Element createRootElement(String rootTagName) 86 { 87 if(doc.getDocumentElement()==null) 88 { 89 logger.debug("create root element '"+rootTagName+"' success."); 90 Element root=doc.createElement(rootTagName); 91 doc.appendChild(root); 92 return root; 93 } 94 logger.warn("this dom's root element is exist,create fail."); 95 return doc.getDocumentElement(); 96 } 97 98 /** 99 * 方法名称:createElement

100 * 方法功能:在parent结点下增加子结点tagName

101 * 参数说明:@param parent102 * 参数说明:@param tagName

103 * 返回:Element

104 * 作者:luoc105 * 日期:2005-6-22106 **/107 public Element createElement(Element parent,String tagName)108 {109 Document doc=parent.getOwnerDocument();110 Element child=doc.createElement(tagName);111 parent.appendChild(child); 112 return child;113 }114 115 /**116 * 方法名称:createElement

117 * 方法功能:在parent结点下增加值为value的子结点tabName

118 * 参数说明:@param parent119 * 参数说明:@param tagName120 * 参数说明:@param value

121 * 返回:Element

122 * 作者:luoc123 * 日期:2005-6-22124 **/125 public Element createElement(Element parent,String tagName,String value)126 {127 Document doc=parent.getOwnerDocument();128 Element child=doc.createElement(tagName);129 XmlOper.setElementValue(child,value);130 parent.appendChild(child);131 return child;132 }133 134 /**135 * 方法名称:createAttribute

136 * 方法功能:在parent结点下增加属性

137 * 参数说明:@param parent138 * 参数说明:@param attrName 属性名139 * 参数说明:@param attrValue 属性值

140 * 返回:void

141 * 作者:luoc142 * 日期:2005-6-22143 **/144 public void createAttribute(Element parent,String attrName,String attrValue)145 {146 XmlOper.setElementAttr(parent,attrName,attrValue); 147 }148 149 /**150 * 方法名称:buildXmlFile

151 * 方法功能:根据DOM生成XML文件

152 * 参数说明:

153 * 返回:void

154 * 作者:luoc155 * 日期:2005-6-22156 **/157 public void buildXmlFile()158 {159 TransformerFactory tfactory=TransformerFactory.newInstance();160 try161 {162 Transformer transformer=tfactory.newTransformer();163 DOMSource source=new DOMSource(doc);164 logger.debug("New DOMSource success.");165 StreamResult result=new StreamResult(new File(path));166 logger.debug("New StreamResult success.");167 transformer.setOutputProperty("encoding","GBK");168 transformer.transform(source,result);169 logger.debug("Build XML File '"+path+"' success.");170 }catch(TransformerConfigurationException e)171 {172 logger.error("Create Transformer error:"+e);173 }catch(TransformerException e)174 {175 logger.error("Transformer XML file error:"+e);176 }177 }178 179 /**180 * @return 返回 doc。181 */182 public Document getDoc()183 {184 return doc;185 }186 /**187 * @param doc 要设置的 doc。188 */189 public void setDoc(Document doc)190 {191 this.doc = doc;192 }193 /**194 * @return 返回 path。195 */196 public String getPath()197 {198 return path;199 }200 /**201 * @param path 要设置的 path。202 */203 public void setPath(String path)204 {205 this.path = path;206 }207 /*全局变量*/208 private Logger logger = Logger.getLogger(getClass().getName());209 private Document doc=null;//新创建的DOM210 private String path=null;//生成的XML文件绝对路径211 }

 

转载自:http://www.cnblogs.com/ITEagle/archive/2010/03/03/1677431.html

转载于:https://www.cnblogs.com/jenkichams/p/3774533.html

你可能感兴趣的文章
js千分位处理
查看>>
js常用的方法
查看>>
Mac---------三指拖移
查看>>
关于VMare中安装Ubuntu的一些说明
查看>>
七、K3 WISE 开发插件《工业单据老单插件中获取登陆用户名》
查看>>
字符串类型的相互转换
查看>>
图片编辑的利器(介绍韩国免费图片工具PhotoScape)
查看>>
Python基础第十一天:递归函数
查看>>
钉钉机器人
查看>>
博雅PHP高级工程师面试题-自拟
查看>>
SQL SERVER 查看表是否存在
查看>>
构建ASP.NET网站十大必备工具
查看>>
a*寻路分析
查看>>
table左边固定-底部横向滚动条-demo
查看>>
MySQL事件异常记录
查看>>
中国创新教育交流会杂感
查看>>
逍遥笔记
查看>>
JSON 命令行工具
查看>>
ubuntu 查看软件包中的内容 (已经安装)
查看>>
iperf 一个测试网络吞吐的工具
查看>>