1、创建一个节点类
package com.example.demo.common;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import java.util.Hashtable;
import java.util.Vector;
public class ZJXmlNode {
String nodeName = "";
String toStringName = "";
String value = "";
Hashtable<String, String> propertyTable = null;
ZJXmlNode parentNode = null;
Vector<ZJXmlNode> subNodeVector = null;
Element element = null;
public ZJXmlNode(String nodeName) {
this.nodeName = nodeName;
toStringName = nodeName;
propertyTable = new Hashtable<String, String>();
subNodeVector = new Vector<ZJXmlNode>();
}
public ZJXmlNode(String nodeName, String value) {
this.nodeName = nodeName;
toStringName = nodeName;
this.value = value;
propertyTable = new Hashtable<String, String>();
subNodeVector = new Vector<ZJXmlNode>();
}
public ZJXmlNode(Element element, ZJXmlNode parentNode) {
nodeName = element.getNodeName();
if (element.getFirstChild() == null) {
value = "";
}
else {
value = element.getFirstChild().getNodeValue();
}
if (value == null || value.trim().equals("\n")) {
value = "";
}
this.element = element;
setParentNode(parentNode);
if (parentNode != null) {
parentNode.addChildrenNode(this);
}
propertyTable = new Hashtable<String, String>();
subNodeVector = new Vector<ZJXmlNode>();
NamedNodeMap attributesMap = element.getAttributes();
for (int i = 0; i < attributesMap.getLength(); i++) {
Node attribute = attributesMap.item(i);
propertyTable.put(attribute.getNodeName(), attribute.getNodeValue());
}
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
this.toStringName = nodeName;
}
public boolean hasProperty(String propName) {
return propertyTable.containsKey(propName);
}
public void setProperty(String key, String value) {
propertyTable.put(key, value);
}
public void setValue(String value) {
this.value = value;
}
public void setElement(Element element) {
this.element = element;
}
public void setParentNode(ZJXmlNode node) {
parentNode = node;
}
public ZJXmlNode getParentNode() {
return parentNode;
}
public void addChildrenNode(ZJXmlNode node) {
subNodeVector.add(node);
}
public String getName() {
return nodeName;
}
public String getValue() {
return value;
}
public Element getElement() {
return element;
}
public int getChildrenNodeCount() {
return subNodeVector.size();
}
public Vector<ZJXmlNode> getChildrenNodes() {
return subNodeVector;
}
public Vector<ZJXmlNode> getChildrenNodes(String nodeName) {
Vector<ZJXmlNode> vector = new Vector<ZJXmlNode>();
for (ZJXmlNode node : subNodeVector) {
if (node.getName().equals(nodeName) == true) {
vector.add(node);
}
}
return vector;
}
public ZJXmlNode getChildrenNode(String nodeName) {
Vector<ZJXmlNode> xmlNodeVector = getChildrenNodes(nodeName);
if (xmlNodeVector.size() > 0) {
return xmlNodeVector.firstElement();
}
else {
return null;
}
}
public void removeChildrenNode(ZJXmlNode childNode) {
subNodeVector.remove(childNode);
}
public void removeChildrenNodes(Vector<ZJXmlNode> childNodeVector) {
for (ZJXmlNode childNode : childNodeVector) {
subNodeVector.remove(childNode);
}
}
public String getProperty(String propName) {
return propertyTable.get(propName) == null ? "" : propertyTable.get(propName);
}
public Hashtable<String, String> getPropertyTable() {
return propertyTable;
}
public void setToStringName(String str) {
toStringName = str;
}
public String toString() {
return toStringName;
}
}
2、编写一个writer类
package com.example.demo.common;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.Map;
public class ZJXmlWriter {
ZJXmlNode rootNode = null;
Document doc = null;
public ZJXmlWriter(String rootNodeName) {
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
doc = docBuilder.newDocument();
}
catch (Exception e) {
e.printStackTrace();
}
rootNode = new ZJXmlNode(rootNodeName);
}
public ZJXmlNode getRootNode() {
return rootNode;
}
public String xmlToString(String xmlFilePath, String charset) {
String xmlStr = "";
FileOutputStream fos = null;
try {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.ENCODING, charset);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
t.transform(new DOMSource(doc), new StreamResult(bos));
xmlStr = bos.toString();}
catch (Exception e) {
e.printStackTrace();
}
return xmlStr ;
}
public void setRootNode(ZJXmlNode rootNode) {
this.rootNode = rootNode;
}
private Element buildChildrenElements(ZJXmlNode node) {
Element element = buildXmlElement(node);
for (int i = 0; i < node.getChildrenNodes().size(); i++) {
Element subElement = buildChildrenElements(node.getChildrenNodes().elementAt(i));
element.appendChild(subElement);
}
return element;
}
private Element buildXmlElement(ZJXmlNode node) {
Element element = doc.createElement(node.getName());
for (Map.Entry<String, String> entry : node.getPropertyTable().entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
key = key.replaceAll(" ", "-");
try {
element.setAttribute(key, value);
}
catch (DOMException e) {
e.printStackTrace();
}
}
if (node.getValue().equals("") == false) {
element.appendChild(doc.createTextNode(node.getValue()));
}
node.setElement(element);
return element;
}
public void flush(String xmlFilePath, String charset) {
FileOutputStream fos = null;
try {
doc.appendChild(buildChildrenElements(rootNode));
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, charset);
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
fos = new FileOutputStream(xmlFilePath);
transformer.transform(new DOMSource(doc), new StreamResult(fos));
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
fos.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
3、最后编写一个测试类
package com.example.demo.Test;
import com.example.demo.common.ZJXmlNode;
import com.example.demo.common.ZJXmlWriter;
import java.io.File;
import java.io.IOException;
public class XmlTest {
public static void main(String[] args) {
ZJXmlWriter xmlWriter = new ZJXmlWriter("root");
ZJXmlNode requestNode =xmlWriter.getRootNode();
ZJXmlNode head_node = new ZJXmlNode("head");
ZJXmlNode h_node = new ZJXmlNode("H");
ZJXmlNode line_node = new ZJXmlNode("line");
line_node.setProperty("name", "ds1");
requestNode.addChildrenNode(head_node);
head_node.addChildrenNode(h_node);
head_node.addChildrenNode(line_node);
ZJXmlNode l_node = new ZJXmlNode("L");
ZJXmlNode ECONo_node = new ZJXmlNode("ECONo");
ECONo_node.setValue("111");
ZJXmlNode OrganizationCode_node = new ZJXmlNode("OrganizationCode");
OrganizationCode_node.setValue("222");
ZJXmlNode AssemblyItem_node = new ZJXmlNode("AssemblyItem");
AssemblyItem_node.setValue("333");
ZJXmlNode Alternate_node = new ZJXmlNode("Alternate");
Alternate_node.setValue("444");
l_node.addChildrenNode(ECONo_node);
l_node.addChildrenNode(OrganizationCode_node);
l_node.addChildrenNode(AssemblyItem_node);
l_node.addChildrenNode(Alternate_node);
line_node.addChildrenNode(l_node);
ZJXmlNode l_node2 = new ZJXmlNode("L");
ZJXmlNode ECONo_node2 = new ZJXmlNode("ECONo");
ECONo_node2.setValue("5555");
ZJXmlNode OrganizationCode_node2 = new ZJXmlNode("OrganizationCode");
OrganizationCode_node2.setValue("6666");
ZJXmlNode AssemblyItem_node2 = new ZJXmlNode("AssemblyItem");
AssemblyItem_node2.setValue("7777");
ZJXmlNode Alternate_node2 = new ZJXmlNode("Alternate");
Alternate_node2.setValue("8888");
l_node2.addChildrenNode(ECONo_node2);
l_node2.addChildrenNode(OrganizationCode_node2);
l_node2.addChildrenNode(AssemblyItem_node2);
l_node2.addChildrenNode(Alternate_node2);
line_node.addChildrenNode(l_node2);
System.out.println("====================获取xml===============================");
try {
File temp_xmlFile;
temp_xmlFile = File.createTempFile("return_temp_xml", ".xml");
xmlWriter.flush(temp_xmlFile.getAbsolutePath(), "utf-8");
String sstr = xmlWriter.xmlToString(temp_xmlFile.getAbsolutePath(), "GB2312");
System.out.println(sstr);
}catch (IOException ioe){
ioe.printStackTrace();
}
}
}
4、结果
====================获取xml===============================
<?xml version="1.0" encoding="GB2312" standalone="no"?><root><head><H/><line name="ds1"><L><ECONo>111</ECONo><OrganizationCode>222</OrganizationCode><AssemblyItem>333</AssemblyItem><Alternate>444</Alternate></L><L><ECONo>5555</ECONo><OrganizationCode>6666</OrganizationCode><AssemblyItem>7777</AssemblyItem><Alternate>8888</Alternate></L></line></head></root>
Process finished with exit code 0```