JavaBean:
package xml;
public class Person {
private String name ;
private int age ;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
*****
Java source:
package xml;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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 org.w3c.dom.Document;
import org.w3c.dom.Element;
public class XmlGeneratorDemo {
public static void main(String[] args) {
String outputPath = "src/xml/parser/persons.xml";
generateXml(outputPath);
}
public static void generateXml(String outputPath) {
try {
Person [] arr = new Person[]{new Person("jinbo",20), new Person("gameboy",25)};
List<Person> list = Arrays.asList(arr); //将数组转换成List
Document doc = generateXml(list);//生成XML文件
outputXml(doc, outputPath);//将文件输出到指定的路径
} catch (Exception e) {
System.err.println("出现异常");
}
}
/**
* 将XML文件输出到指定的路径
* @param doc
* @param fileName
* @throws Exception
*/
private static void outputXml (Document doc, String fileName) throws Exception{
TransformerFactory tf = TransformerFactory.newInstance(); //newInstance() 获取 TransformerFactory
的新实例。
Transformer transformer = tf.newTransformer(); //javax.xml.transform.Transformer 此抽象类的实例能够将源树转换为结果树
可以使用此实例处理来自不同源的 XML,并将转换输出写入各种接收器
DOMSource source = new DOMSource(doc); //类DOMSource 以 Document Object Model(DOM)树的形式充当转换 Source 树的持有者
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //setOutputProperty(String name, String value) 设置转换中实际的输出属性
//类 OutputKeys 提供可用于设置 Transformer 的输出属性或从 Transformer 或 Templates 对象检索输出属性的字符串常量
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //设置文档的换行与缩进
PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
StreamResult result = new StreamResult(pw); //类StreamResult 充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记
transformer.transform(source, result); //javax.xml.transform.Transformer--method:transform(Source xmlSource, Result outputTarget) 将 XML Source 转换为 Result
//推荐使用--transformer.transform(new DOMSource(doc), new StreamResult(stringWriter));
System.out.println("生成XML文件成功!");
}
/**
* 生成XML文件
* @param list
* @return
*/
public static Document generateXml(List<Person> list){
Document doc = null;
Element root = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.newDocument();
root = doc.createElement("person");
doc.appendChild(root);
} catch (Exception e) {
e.printStackTrace();
return null;//如果出现异常,则不再往下执行
}
int len = list.size() ;
Element element ;
for (int i = 0; i < len; i++) {
Person person = list.get(i);
element = doc.createElement("person"+(i+1));
element.setAttribute("age", ""+person.getAge()); //从接口 org.w3c.dom.Node 继承的字段--Element setAttribute(String name, String value) 添加一个新属性
element.setAttribute("name", person.getName());
root.appendChild(element);
}
return doc;
}
}