这是我第一次写博客,所以可能写得不太好,请大家见谅!!
之前在网上看到了很多java生成xml字符串和创建xml本地文件的文章,但是感觉不太完整和解释不太详细(可能是我没有找到。。。)!
所以我自己总结了一下知识,希望对大家有用,也方便自己查阅!!
这篇博客的思路:
1. 关键代码步骤
2. 代码设计思路
3. 运行的结果图片
4. 完整代码
5. 代码的使用 | 测试
关键代码块:
Dom步骤:
1. 创建DocumentBuilderFactory工厂对象: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance():
2. 通过工厂对象,创建DocumentBuilder制作对象:DocumentBuilder builder = factory.newDocumentBuilder();
3. 通过制作对象,创建一个Document对象:Document document = builder.newDocument();
4. 创建节点:Element root = document.createElement(“节点名称”);
5. 添加节点:Element.appendChild(节点);
6. 节点添加属性:Element.setAttribute(“属性名”,”属性值“);
7. 节点间的内容:Element.setTextContent(“标签间内容”);
转换xml步骤:
1. 创建TransformerFactory工厂对象:TransformerFactory transFactory = TransformerFactory.newInstance();
2. 通过工厂对象, 创建Transformer对象:Transformer transformer = transFactory.newTransformer();
3. 创建DOMSource对象:DOMSource domSource = new DOMSource(document);
4. 创建字节流:ByteArrayOutputStream bos = new ByteArrayOutputStream();
5. Transformer的transform()方法将DOM树转换成XML:Transformer对象.transform(DOMSource对象, new StreamResult(bos));
以上为关键代码,如果大家已经有了自己的思路和想法的话,可以不用再往下看了!!
下面为我自己的代码设计思路(可能不一定很好,所以大家也可用自己的设计)
代码设计思路:
1. 创建类XmlFormat:为xml的格式类,一个XmlFormat代表一个层级
(包含:根节点,层级节点,属性节点,设置节点的内容方法)
2. 创建类XmlHandler:用于生成xml字符串 和 生成xml文件
(包含:XmlFormat的集合,创建dom树的方法,生成xml字符串的方法,生成xml文件的方法,重载两个接口方法)
运行的结果图片:
这是第一种格式的xml图(生成的xml并没有换行,我是手动换的,方便图片制作)
这是第二种格式的xml图(生成的xml并没有换行,我是手动换的,方便图片制作)
这是本地生成的xml
完整代码
XmlFormat类:xml的格式类
import java.util.HashMap;
public class XmlFormat {
//根节点名称
private String rootName;
//层级节点 名称/值 (值可为空。当值为空时,代表节点下带有属性节点。 当值不等于空时,代表该节点直接包含内容,没有属性节点)
private HashMap<String, Object> multiplyNames;
//属性节点 名称/值
private HashMap<String, Object> propertyNames;
/**构造函数
* 参数: 根节点名称
* */
public XmlFormat(String rootName){
this.rootName = rootName;
this.multiplyNames = new HashMap<String, Object>();
this.propertyNames = new HashMap<String, Object>();
}
/**(重载)用于xml层级节点键/值(没有属性节点)
* 参数: 层级节点名称, 层级节点的值
* */
public void setElement(String multiplyName, String multiplyValue) {
this.multiplyNames.put(multiplyName, multiplyValue);
}
/**(重载)用于xml层级节点,属性节点
* 参数: 层级节点名称, 属性节点键/值
* */
public void setElement(String multiplyName, HashMap<String, Object> propertyNames) {
this.multiplyNames.put(multiplyName, null);
this.propertyNames = propertyNames;
}
/**
* getter / setter
* */
......
}
XmlHandler类:用于生成xml字符串 和 生成xml文件