动态创建xml格式及其内容

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) {
        //xml格式定义
        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```

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值