Java生成xml文件

5 篇文章 0 订阅

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; 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值