⑴ 如何用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();
}
}
⑵ 怎麼使用java導出大數據為xml文件
dom4j可以試試,不知道你的數據量有多大,如果太大的話,我沒試過
xml文件是有規律的,你可以把要導出的數據構造一下,
我有個簡單的代碼
packagecom.test.xml;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.Writer;
importorg.dom4j.Document;
importorg.dom4j.DocumentHelper;
importorg.dom4j.Element;
importorg.dom4j.io.OutputFormat;
importorg.dom4j.io.XMLWriter;
publicclassDom4JXML{
publicvoidcreateXML(){
//用工廠類創建一個document實例
Documentdoc=DocumentHelper.createDocument();
//創建根元素emps
ElementrootEle=doc.addElement("emps");
//添加註釋
rootEle.addComment("這是一個dom4j生成的xml文件");
//emps根節點下創建一個emp節點
ElementempEle=rootEle.addElement("emp");
//emp添加屬性id="1"
empEle.addAttribute("id","1");
//emp節點下創建一個name節點
ElementnameEle=empEle.addElement("name");
//name節點下創建一個文本節點zhangsan
nameEle.setText("zhangsan");
//再為name節點創建一個兄弟節點
ElementsexEle=empEle.addElement("sex");
sexEle.setText("man");
//將document中的內容寫入文件中
try{
Writerout=newFileWriter("F:\emps.xml");
//格式化輸出,類型IE瀏覽一樣
OutputFormatformat=OutputFormat.createPrettyPrint();
//OutputFormatformat=OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//創建寫出對象
XMLWriterwriter=newXMLWriter(out,format);
writer.write(doc);
writer.close();
System.out.println("生成emps.xml成功。");
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
System.out.println("失敗了。");
}
}
publicstaticvoidmain(String[]args){
newDom4JXML().createXML();
}
}
然而從xml文件中解析以後的數據收集可以用SAX試試看
我這里有個簡單的例子
packagecom.test.xml;
importorg.xml.sax.Attributes;
importorg.xml.sax.SAXException;
importorg.xml.sax.helpers.DefaultHandler;
{
publicvoidstartDocument()throwsSAXException{
System.out.println("起始文擋");
}
publicvoidendDocument()throwsSAXException{
System.out.println("結束文擋");
}
publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
StringcharString=newString(ch,start,length);
System.out.println("字元:"+charString);
}
publicvoidstartElement(StringnamespaceURI,StringlocalName,StringqName,Attributesatts)throwsSAXException{
System.out.println("起始元素:"+qName);
for(inti=0;i<atts.getLength();i++){
System.out.println("屬性值:"+atts.getValue(i));
}
}
publicvoidendElement(StringnamespaceURI,StringlocalName,StringqName)throwsSAXException{
System.out.println("結束元素:"+qName);
}
}
packagecom.test.xml;
importjavax.xml.parsers.SAXParser;
importjavax.xml.parsers.SAXParserFactory;
publicclassBooks{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args)throwsException{
//TODO自動生成方法存根
SAXParserFactoryfactory=SAXParserFactory.newInstance();
SAXParserparser=factory.newSAXParser();
parser.parse("booksamp.xml",newSAXParseHandler());
}
}
⑶ java dom4j生成有前綴節點的 xml,節點類似soapenv:Envelope模樣
soapenv:Envelope
可以當作一個節點的名字。。。。。。
⑷ dom4j創建xml文檔
dom4j 的 XMLWriter 現在還不支持standalone, 你可以重寫(override)其 writeDeclaration 方法:
public class StandaloneWriter extends XMLWriter {
protected void writeDeclaration() throws IOException {
OutputFormat format = getOutputFormat();
String encoding = format.getEncoding();
if (!format.isSuppressDeclaration()) {
writer.write("<?xml version=\"1.0\"");
if (!format.isOmitEncoding()) {
if (encoding.equals("UTF8"))
writer.write(" encoding=\"UTF-8\"");
else
writer.write(" encoding=\"" + encoding + "\"");
}
writer.write(" standalone=\"true\"");
writer.write("?>");
if (format.isNewLineAfterDeclaration()) { println(); }
}
}
}
⑸ java dom4j生成XML如何配置文檔類型doctype
搞定了沒。一個方法是 形如:
WriterfileWriter=newFileWriter("");
fileWriter.write("");---1
XMLWriterxmlWriter=newXMLWriter(fileWriter);
xmlWriter.write("")----2
⑹ Java語言:為什麼我用dom4j.jar生成xml有方形黑點
生成的xml文件,用記事本打開總是換行符是方形黑色的點,用寫字板打開沒事。和換行符有關,通常意義上來說windows操作系統中換行符是\r\n,unix、linux操作系統的換行符是\n,dom4j在生成xml進行換行時可能是輸出的\n,而不是\r\n,這樣的話就會導致在windows操作系統中不能換行或者在應該換行的位置輸出一個方塊這真心不影響使用,不用做任何改進,如果覺得不美觀,用editplus打開,不使用記事本打開就行了
⑺ java dom4j生成xml字元串是怎麼設置編碼
/** 將document中的內容寫入文件中 */
OutputFormat outputFormat = new OutputFormat();
outputFormat.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),outputFormat);
writer.write(document);
writer.close();
/** 執行成功,需返回1 */
returnValue = 1;