`
lcf11824
  • 浏览: 86745 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

用java生成一个xml文件

阅读更多
一个XML文档,可以先构造一个DOM,然后将DOM转化为xml序列,输出或者生成文件。网上有很多这样的代码,所以我这边也借鉴了一下别人的。以下的代码大部分是转的。
package test;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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 Test {

    public static void generate(){
        try {

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.newDocument();
            document.setXmlVersion("1.0");
            document.setXmlStandalone(true);
            
            Element root = document.createElement_x("MobileNet");       //创建根节点   
            document.appendChild(root);                               //将根节点添加到Document对象中 
            
            Element pageElement = document.createElement_x("page");     //设置第一个page元素到
            pageElement.setAttribute("name", "list.jsp");             //设置page节点的name属性

            Element methodElement = document.createElement_x("method");   //设置method节点
            methodElement.setTextContent("get");                        //给method设置值
            pageElement.appendChild(methodElement);                     //添加method节点到page节点内

            Element displayElement = document.createElement_x("display");    //设置method节点
            displayElement.setTextContent("list撒旦发放");                         //给display设置值
            pageElement.appendChild(displayElement);            //添加display节点到page节点内 
            
            Element request_paramElement = document.createElement_x("request_param");
            request_paramElement.setTextContent("request_param1|request_param2");
            pageElement.appendChild(request_paramElement);
            
            root.appendChild(pageElement);
            pageElement = document.createElement_x("page");                    //设置第二个page元素到
            pageElement.setAttribute("name", "content.jsp");                 //设置page节点的name属性

            methodElement = document.createElement_x("method");
            methodElement.setTextContent("post");
            
            pageElement.appendChild(methodElement);
            displayElement = document.createElement_x("display");
            displayElement.setTextContent("content");
            
            pageElement.appendChild(displayElement);
            
            Element url_titleElement = document.createElement_x("url_title");        //设置url_title节点
            url_titleElement.setTextContent("title,publisher,published_calendar"); //给url_title设置值
            pageElement.appendChild(url_titleElement);                             //添加url_title节点到page节点内

            root.appendChild(pageElement);                                         //将page段加人根节点内

            TransformerFactory transFactory = TransformerFactory.newInstance();     //开始把Document映射到文件
            Transformer transFormer = transFactory.newTransformer();

            DOMSource domSource = new DOMSource(document);                           //设置输出结果

            File file = new File("MobileNetRule.xml"); //生成xml文件

            if (!file.exists()) {
                file.createNewFile();
            }
          
            FileOutputStream out = new FileOutputStream(file);          //文件输出流            
            StreamResult xmlResult = new StreamResult(out);            //设置输入源   
            
            transFormer.transform(domSource, xmlResult);              //输出xml文件            
            System.out.println(file.getAbsolutePath());               //测试文件输出的路径
            
            TransformerFactory  tf  =  TransformerFactory.newInstance();
            Transformer t = tf.newTransformer();
            t.setOutputProperty("{/encoding/}","GB2312/");
            ByteArrayOutputStream boc  = new ByteArrayOutputStream();
            t.transform(new DOMSource(document), new StreamResult(boc));
            String xmlstring = boc.toString();
            System.out.println(xmlstring);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args){
     Test.generate();
    
    }
}

输出文件之后的代码是自己编写的,将一个Document对象转换为一个String类型,这里需要使用的是Transformer类的transform方法。编写的时候遇到了两个问题:
第一: displayElement.setTextContent("content");这样的方法在另外一个Eclipse编辑器中找不到,怀疑是版本的问题,所以改成了这样使用displayElement.appendChild(document.creatTextNode("content"));
第二:仍旧是在另一个机器的Eclipse中找不到方法setXMLVersion,最后终于发现问题,在lib文件夹下有其他xml操作包,所以造成方法找不到。所以,以后编辑程序的时候,一定要注意导入的包。不使用的包要及时清除。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics