使用DOM方式生成XML文件有如下几步:
第一步:创建DOM树(即规定XML文件中的内容)
- 创建javax.xml.parsers.DocumentBuilderFactory对象。
- 通过DocumentBuilderFactory对象创建javax.xml.parsers.DocumentBuilder对象
- 通过DocumentBuilder对象创建org.w3c.dom.Document对象,Document对象就代表一个XML文件
- 通过Document对象的createElement()方法创建根节点
- 通过Document对象的createElement()方法创建根节点下的子节点,并为这些子节点设置属性与文本值等。
- 利用org.w3c.dom.NodeList接口中的appendChild()方法设置各个节点之间的关系。
第二步:将DOM树转换为XML文件
- 创建javax.xml.transform.TransformerFactory类的对象。
- 通过TransformerFactory创建javax.xml.transform.Transformer对象。
- 使用Transformer对象的transform()方法将DOM树转换为XML文件。
DOM生成XML文件的具体案例如下
public class TestDemoH {
public static void main(String[] args) throws Exception{
//1.取得DocumentBuilderFactory对象
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//2.取得DocumentBuilder对象
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//3.创建Document对象
Document document = documentBuilder.newDocument();
//取得要输出的内容(为了方便,此处直接设置输出内容)
String names[] = new String[]{"张三","李四"};
String ages[] = new String[]{"18","19"};
String tels[] = new String[]{"110","120"};
String ids[] = new String[] {"001","002"};
//4.创建根节点<contract>
Element contract = document.createElement("contract");
for (int x = 0; x < names.length; x++) {
//5.创建子节点<member>
Element member = document.createElement("member");
//6.为member节点设置属性值(id)
member.setAttribute("id",ids[x]);
//7.创建<member>节点的子节点<name>节点
Element name = document.createElement("name");
//8.为<name>节点设置文本值
name.setTextContent(names[x]);
//9.将<name>节点添加到<member>节点下
member.appendChild(name);
//10.创建<member>节点的子节点<age>节点
Element age = document.createElement("age");
//10.为<age>节点设置文本值
age.setTextContent(ages[x]);
//12.将<age>节点添加到<member>节点下
member.appendChild(age);
//13.创建<member>节点的子节点<tel>节点
Element tel = document.createElement("tel");
//14.为<tel>节点设置文本值
tel.setTextContent(tels[x]);
//15.将<tel>节点添加到<member>节点下
member.appendChild(tel);
//16.将<member>节点设置到跟节点下
contract.appendChild(member);
}
//17.将根节点<contract>设置到DOM树下
document.appendChild(contract);
//到此,DOM树中的内容设置完毕,接下要要做的就是将DOM树以xml文件的形式进行输出
//18.创建javax.xml.transform.TransformerFactory对象
TransformerFactory transformerFactory = TransformerFactory.newInstance();
//19.创建javax.xml.transform.Transformer对象
Transformer transformer = transformerFactory.newTransformer();
//20.将DOM树作为输出源,Document接口是Node接口的子接口
Source source = new DOMSource(document);
//设置xml文件的输出路径
File file = new File("E:" + File.separator + "Telephone.xml");
if (!file.exists()) {
file.createNewFile();
}
//21.设置转换的模式,此时使用流的方式输出
Result result = new StreamResult(new FileOutputStream(file));
//22.设置输出文件的编码方式(默认是ISO-8859-1)
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
//23.利用转换工具进行输出
transformer.transform(source,result);
}
}