import java.io.*;
import javax.xml.parsers.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import org.xml.sax.*;
import org.w3c.dom.*;
public class WriteXML {
? public WriteXML(String fn) {
??? /行26-38创建了文档对象//
??? Document xmlDoc=null;
??? try {
????? //如果将这些工厂、Builder都单独获得实例将有更大的配置灵活性
????? //但这里方便起见直接得到文档
????? xmlDoc = DocumentBuilderFactory.newInstance().
????????? newDocumentBuilder().newDocument();
??? }
??? catch (FactoryConfigurationError ex) {
????? ex.printStackTrace();
??? }
??? catch (ParserConfigurationException ex) {
????? ex.printStackTrace();
??? }
??? 形成DOM树
??? //下面两行加入了根节点
??? Element bookRoot=xmlDoc.createElement("book");
??? xmlDoc.appendChild(bookRoot);
??? //创建子节点
??? Element title=xmlDoc.createElement("title");//节点标记名称
??? title.appendChild(xmlDoc.createTextNode("My Story"));//节点文字内容
??? bookRoot.appendChild(title);
??? //创建带属性节点
??? Element author=xmlDoc.createElement("author");
??? author.appendChild(xmlDoc.createTextNode("John Smith"));//普通文字内容
??? Attr gender=xmlDoc.createAttribute("gender");//属性名称
??? gender.setValue("M");//属性值
??? author.setAttributeNode(gender);//将属性附加到节点
??? /*上面三行和这一行的效果一样:
???? author.setAttribute("gender","M");
??? */
??? bookRoot.appendChild(author);
??? //创建注释
??? Comment cmnt=xmlDoc.createComment("It's just a comment.");
??? bookRoot.appendChild(cmnt);
??? /写磁盘/
??? Source xmlSrc=new DOMSource(xmlDoc);//获得源码
??? //获得输出流
??? Result rslt=null;
??? try {
????? rslt = new StreamResult(new FileOutputStream(fn));
??? }
??? catch (FileNotFoundException ex1) {
????? ex1.printStackTrace();
??? }
??? //转换写入
??? Transformer tr=null;
??? try {
????? tr = TransformerFactory.newInstance().newTransformer();
????? tr.transform(xmlSrc, rslt);//将源码转换入流
??? }
??? catch (TransformerException ex2) {
????? ex2.printStackTrace();
??? }
??? catch (TransformerFactoryConfigurationError ex2) {
????? ex2.printStackTrace();
??? }
? }
? public static void main(String[] args) {
??? WriteXML xmlWriter = new WriteXML("aBook.xml");//指定文件名
? }
}