用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操作包,所以造成方法找不到。所以,以後編輯程序的時候,一定要注意導入的包。不使用的包要及時清除。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章