<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[Java与XML互转的N种实现方式]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[Web开发]]></category>
<pubDate>Sun, 30 Mar 2014 12:05:51 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	最近又用到XML，发现也有必要聊聊XML的几种方式。<br/><br/>1、如果只是简单生成或者解析，自己写一个帮助类就行，下面这个是我前段时间用递归写的，优势方便可以扩展<br/><br/>import java.util.ArrayList;<br/>import java.util.List;<br/><br/>/**<br/> * <br/> * <br/> * <br/> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TODO manage node and value.and format the node to xml file<br/> * <br/> */<br/>public class XMLSimpleNode implements SimpleNode &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String nodeName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;List&lt;SimpleNode&gt; childs;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String header;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public XMLSimpleNode(String nodeName) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.nodeName = nodeName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childs = new ArrayList&lt;SimpleNode&gt;(2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getNodeName() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nodeName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/*<br/>&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br/>&nbsp;&nbsp;&nbsp;&nbsp; * <br/>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.benson.another.SimpleXMLFileUtil#setNodeName(java.lang.String)<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setNodeName(String nodeName) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.nodeName = nodeName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getValue() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/*<br/>&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br/>&nbsp;&nbsp;&nbsp;&nbsp; * <br/>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.benson.another.SimpleXMLFileUtil#setValue(java.lang.String)<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setValue(String value) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.value = value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/*<br/>&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br/>&nbsp;&nbsp;&nbsp;&nbsp; * <br/>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.benson.another.SimpleXMLFileUtil#addChild(org.benson.another.XMLItem)<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void addChild(SimpleNode node) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childs.add(node);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String startTag() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer tagSart = new StringBuffer(&quot;&lt;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tagSart.append(nodeName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tagSart.append(&quot;&gt;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tagSart.toString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String endTag() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer tagEnd = new StringBuffer(&quot;&lt;/&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tagEnd.append(nodeName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tagEnd.append(&quot;&gt;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return tagEnd.toString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getHeader() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return header;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/*<br/>&nbsp;&nbsp;&nbsp;&nbsp; * (non-Javadoc)<br/>&nbsp;&nbsp;&nbsp;&nbsp; * <br/>&nbsp;&nbsp;&nbsp;&nbsp; * @see org.benson.another.SimpleXMLFileUtil#setHeader(java.lang.String)<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void setHeader(String header) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.header = header;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * ToDo format the node to xml file<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public String formartXMLFile() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer xmlFileBf = new StringBuffer();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlFileBf.append(this.getHeader());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.getNode(this, xmlFileBf).toString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * <br/>&nbsp;&nbsp;&nbsp;&nbsp; * @param node<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @param xmlFileBf<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @return get XML content by node<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;private StringBuffer getNode(SimpleNode node, StringBuffer xmlFileBf) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLSimpleNode xmlNode = (XMLSimpleNode) node;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLSimpleNode xmlNodeItem = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlFileBf.append(xmlNode.startTag());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (xmlNode.childs.size() != 0) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; xmlNode.childs.size(); i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlNodeItem = (XMLSimpleNode) xmlNode.childs.get(i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getNode(xmlNodeItem, xmlFileBf);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (xmlNode.getValue() != null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlFileBf.append(xmlNode.getValue());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlFileBf.append(xmlNode.endTag());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return xmlFileBf;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode xmlNode = new XMLSimpleNode(&quot;root&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlNode.setHeader(&quot;&lt;?xml version=&#92;&quot;1.0&#92;&quot; encoding=&#92;&quot;UTF-8&#92;&quot; ?&gt; &quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode chridNode1 = new XMLSimpleNode(&quot;chrid1&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode chridNode2 = new XMLSimpleNode(&quot;chrid2&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode chridNode3 = new XMLSimpleNode(&quot;chrid3&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode chridNode11 = new XMLSimpleNode(&quot;chrid11&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode chridNode12 = new XMLSimpleNode(&quot;chrid12&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleNode chridNode13 = new XMLSimpleNode(&quot;chrid13&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode11.setValue(&quot;chridNode11 Value&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode12.setValue(&quot;chridNode12 Value&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode13.setValue(&quot;chridNode13 Value&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode2.setValue(&quot;chridNode2 Value&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode3.setValue(&quot;chridNode3 value&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode1.addChild(chridNode11);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode1.addChild(chridNode12);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chridNode1.addChild(chridNode13);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlNode.addChild(chridNode1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlNode.addChild(chridNode2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlNode.addChild(chridNode3);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(xmlNode.formartXMLFile());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/><br/>&#125;<br/><br/><br/>输出结果如下<br/><br/>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt; &lt;root&gt;&lt;chrid1&gt;&lt;chrid11&gt;chridNode11 Value&lt;/chrid11&gt;&lt;chrid12&gt;chridNode12 Value&lt;/chrid12&gt;&lt;chrid13&gt;chridNode13 Value&lt;/chrid13&gt;&lt;/chrid1&gt;&lt;chrid2&gt;&lt;/chrid2&gt;&lt;chrid3&gt;&lt;/chrid3&gt;&lt;/root&gt;<br/>其实个人感觉和jdom就有点类似了，扩展下就好了<br/><br/> <br/><br/><strong>2、用DOM，这个东西也是把XML组成树，然后放进内存中，但是遵循了w3c的原则，方便移植，兼容性好，</strong>你可以切换各种实现方式如，Xerces，或者Crimon，再或者其它，修改jaxp.propertie，JDK默认是Xerces。<br/><br/>缺点也很明显，一次性加载进内存，容易造成内存溢出，API也不好用，不支持接点的随机访问<br/><br/>顺便说句，最近看源码发现spring就是用这个做配置文件解析的 附<a href="http://www.cnblogs.com/springsource/archive/2013/01/23/2873365.html" target="_blank">2. spring中IOC的实现源码篇【analyze spring framework source】</a>，所以当spring配置文件过多时也会报out memory了<br/><br/> <br/><br/>注意：没找到？因为sun的JDK默认是不存在的，IBM的JDK存在，新建一个就行 ，<br/><br/>放在&nbsp;&nbsp;$&#123;JAVA_HOME&#125;/lib/jaxp.properties,<br/><br/>修改成 javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl<br/><br/>常见IBM JDK兼容性错误，一般也是这个原因引起:<br/><br/>javax.xml.parsers.FactoryConfigurationError: Provider null could not be instantiated:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>java.lang.NullPointerException&nbsp;&nbsp;<br/><br/> <br/><br/><strong>3、jdom ，这个也是基于DOM实现的，</strong>但其API比DOM好用，更灵活，不是标准W3C<br/><br/><strong>4、SAX，这个是逐行解析和构建XML文件，</strong>优点就是不用把XML整个结构都加进内存，适用于大批量的XML文件导入导出，缺点：每次都要去读文件，肯定没有直接内存里速度快了<br/><br/>附上：<a href="http://www.cnblogs.com/deepnighttwo/archive/2011/06/12/2078809.html" target="_blank">SAXP解析XML的笔记</a> 挺详细的 <br/><strong>5、DOM4J，原来是JDOM的分支，现独立开发，处于JDOM于SAX之间，即支持把XML放进内存，但可以读取时选择性删除DOM节点减少内存使用，所以也可以处理大数据XML文件</strong>，传说hibernate的配置文件也是基于dom4J（没看hibernate源码）<br/><br/>优点，提供读取事件处理，提供Visitor处理，也可以处理大数据XML文件（每次读完节点后删除）当然处理大数据咋样也不如SAX节省内存了，毕竟要读完一个element才会触发<br/><br/>百度百科的介绍的不错 <a href="http://baike.baidu.com/view/1460716.htm" target="_blank">http://baike.baidu.com/view/1460716.htm</a><br/><br/> <br/><br/>show you the code. 下面就是分别用这4中方法读写XML<br/><br/>import java.io.File;<br/>import java.io.FileInputStream;<br/>import java.io.FileNotFoundException;<br/>import java.io.FileOutputStream;<br/>import java.io.IOException;<br/>import java.io.InputStream;<br/>import java.io.OutputStream;<br/>import java.util.Iterator;<br/>import java.util.List;<br/><br/>import javax.xml.parsers.DocumentBuilder;<br/>import javax.xml.parsers.DocumentBuilderFactory;<br/>import javax.xml.parsers.SAXParser;<br/>import javax.xml.parsers.SAXParserFactory;<br/>import javax.xml.stream.XMLOutputFactory;<br/>import javax.xml.stream.XMLStreamWriter;<br/>import javax.xml.transform.Transformer;<br/>import javax.xml.transform.TransformerFactory;<br/>import javax.xml.transform.dom.DOMSource;<br/>import javax.xml.transform.stream.StreamResult;<br/><br/>import org.dom4j.ElementHandler;<br/>import org.dom4j.ElementPath;<br/>import org.dom4j.io.SAXReader;<br/>import org.dom4j.io.XMLWriter;<br/>import org.jdom.JDOMException;<br/>import org.jdom.input.SAXBuilder;<br/>import org.jdom.output.XMLOutputter;<br/>import org.w3c.dom.Document;<br/>import org.w3c.dom.Element;<br/>import org.w3c.dom.NodeList;<br/>import org.xml.sax.Attributes;<br/>import org.xml.sax.SAXException;<br/>import org.xml.sax.helpers.DefaultHandler;<br/><br/>/**<br/> * <br/> * <br/> * @TD use the SAX DOM JDOM to build and parser xml file<br/> * <br/> */<br/>public class Test4XML extends DefaultHandler implements ElementHandler &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String tagName = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final String FILE_PATH = &quot;D://saxText.xml&quot;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void characters(char[] ch, int start, int length) throws SAXException &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(tagName + &quot;===SAX===&gt;&quot; + new String(ch, start, length));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tagName = qName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void removeFile() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;the file have be delete is &quot; + new File(FILE_PATH).delete());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void onEnd(ElementPath paramElementPath) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO print node <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.dom4j.Element ele=paramElementPath.getCurrent();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ele.getName()+&quot;===DOM4J====&gt;&quot;+ele.getText());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele.detach();//after read /root/user node .remove it from memory,avoid out of memory<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void onStart(ElementPath paramElementPath) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void writeXMLByDOM() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilderFactory buildFactory = DocumentBuilderFactory.newInstance();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilder documentBuilder = buildFactory.newDocumentBuilder();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document doc = documentBuilder.newDocument();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element ele = doc.createElement(&quot;root&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element ele1 = doc.createElement(&quot;user&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele1.setTextContent(&quot;largeMeatBun&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele.appendChild(ele1);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element ele2 = doc.createElement(&quot;email&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele2.setTextContent(&quot;hejinbin1987@163.com&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele.appendChild(ele2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.appendChild(ele);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMSource xmlSource = new DOMSource(doc);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransformerFactory transFactory = TransformerFactory.newInstance();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transformer transformer = transFactory.newTransformer();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream outputTarget = new FileOutputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transformer.transform(xmlSource, new StreamResult(outputTarget));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outputTarget.close();//the output steam can&#039;t auto to close<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void readerDOMParseXML() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilderFactory buildFactory = DocumentBuilderFactory.newInstance();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DocumentBuilder documentBuilder = buildFactory.newDocumentBuilder();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream file = new FileInputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Document document = documentBuilder.parse(file);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file.close();//the xml data have load in memory<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element node = document.getDocumentElement();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NodeList nodelist = node.getChildNodes();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; nodelist.getLength(); i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(nodelist.item(i).getNodeName() + &quot;===DOM===&gt;&quot; + nodelist.item(i).getTextContent());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void writeXMLBySAX() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sax writer<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream SAXOut = new FileOutputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLStreamWriter xmlWrite = XMLOutputFactory.newInstance().createXMLStreamWriter(SAXOut);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeStartDocument(&quot;utf-8&quot;, &quot;1.0&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeStartElement(&quot;root&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeStartElement(&quot;user&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeCharacters(&quot;largeMeatBun&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeEndElement();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeStartElement(&quot;email&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeCharacters(&quot;hejinbin1987@163.com&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeEndElement();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeEndElement();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.writeEndDocument();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlWrite.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXOut.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void parseXMLbySAX() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//sax parser<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream SAXIn = new FileInputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saxParser.parse(SAXIn, this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public org.jdom.Document readXMLByJDOM() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream JDOMInput = new FileInputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jdom.Document doc = new SAXBuilder().build(JDOMInput);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jdom.Element eleRoot = doc.getRootElement();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;org.jdom.Element&gt; eleJDOMList = eleRoot.getChildren();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (org.jdom.Element eleJDOM : eleJDOMList) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(eleJDOM.getName() + &quot;====JDOM===&gt;&quot; + eleJDOM.getText());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return doc;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void writeXMLByJDOM(org.jdom.Document doc) throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream JDOMOut = new FileOutputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new XMLOutputter().output(doc, JDOMOut);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDOMOut.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public org.dom4j.Document readXMLByDOM4J() throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXReader saxReadernew =new SAXReader();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saxReadernew.addHandler(&quot;/root/user&quot;, this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.dom4j.Document docD4J = saxReadernew.read(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.dom4j.Element rootD4E = docD4J.getRootElement();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&lt;org.dom4j.Element&gt; iterD4E = rootD4E.elementIterator();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (iterD4E.hasNext()) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.dom4j.Element eleD4E = iterD4E.next();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(eleD4E.getName() + &quot;===DOM4J===&gt;&quot; + eleD4E.getText());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return docD4J;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public void writeXMLByDOM4J(org.dom4j.Document docD4J) throws Exception &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream DOM4JOut = new FileOutputStream(FILE_PATH);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XMLWriter writer = new XMLWriter(DOM4JOut);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;writer.write(docD4J);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOM4JOut.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) throws Exception &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * dom you can change the implement class any one you like in jaxp.properties<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dom writer and parser<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test4XML test4Xml = new Test4XML();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test4Xml.writeXMLByDOM();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test4Xml.readerDOMParseXML();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * SAX help doc http://doc.java.sun.com/DocWeb/api/all/javax.xml.stream.XMLStreamWriter<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeFile();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test4Xml.writeXMLBySAX();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test4Xml.parseXMLbySAX();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @see http://www.jdom.org/ to find api on jdom web<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jdom.Document doc = test4Xml.readXMLByJDOM();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeFile();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test4Xml.writeXMLByJDOM(doc);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @see http://www.dom4j.org/<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.dom4j.Document docDOM4J = test4Xml.readXMLByDOM4J();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test4Xml.writeXMLByDOM4J(docDOM4J);<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeFile();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&#125;<br/><br/><strong>6、其它开源项目，比如xstream等</strong><br/>Tags - <a href="https://www.heckjj.com/tags/java/" rel="tag">java</a> , <a href="https://www.heckjj.com/tags/xml/" rel="tag">xml</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] Java与XML互转的N种实现方式]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>