2012-01-14 95 views
8

我想從中生成一個java swing應用程序,我可以在其中生成保存相同數據的xml文件,並且生成的文件數將由用戶決定。我的xml文件包含xml架構和我的xml文件結構正在尋找這樣java中的xml文件生成器

<transaction> 
    <xs:schema id="transaction" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="transaction" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:element name="id"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="name" type="xs:string" minOccurs="0" /> 
       <xs:element name="sn" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="data"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="dateTime" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="key" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      <xs:element name="productData"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="dateTime" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="key" type="xs:string" minOccurs="0" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    </xs:schema> 
    <id> 
    <name>smith</tli> 
    <sn>1234567</sn> 
    </id> 
    <data> 
    <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime> 
    <key>book</key> 
    </data> 
    <productData> 
    <dateTime>2011-06-24T17:08:36.3727674+05:30</dateTime> 
    <key>game</key> 
    </productData> 
</transaction> 

我在新的java如果有一個人給一些代碼斯奈普斯的幫助,這將是對我來說更有幫助。

我想生成XML文件,其中包含我的示例xml中給出的xml架構。

+1

看的dom4j - http://dom4j.sourceforge.net/嘗試寫一些代碼,然後回來,如果你有問題 – 2012-01-14 20:27:12

+2

@GreenDay - 雖然我一直很喜歡的dom4j比JDOM好,除非有特定的需要,我強烈建議堅持使用像JAXP這樣的標準API--而不是將代碼與dom4j這樣的特定實現緊密綁定。 – ziesemer 2012-01-14 20:31:27

回答

10

在java中,您使用JAXP來處理XML。您使用DOM相關類來生成xml。以下是使用JAXP創建XML的一個小例子。

import java.io.File; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Attr; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

public class WriteXMLFile { 

    public static void main(String argv[]) { 

     try { 

     DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

     // root elements 
     Document doc = docBuilder.newDocument(); 
     Element rootElement = doc.createElement("company"); 
     doc.appendChild(rootElement); 

     // staff elements 
     Element staff = doc.createElement("Staff"); 
     rootElement.appendChild(staff); 

     // set attribute to staff element 
     Attr attr = doc.createAttribute("id"); 
     attr.setValue("1"); 
     staff.setAttributeNode(attr); 

     // shorten way 
     // staff.setAttribute("id", "1"); 

     // firstname elements 
     Element firstname = doc.createElement("firstname"); 
     firstname.appendChild(doc.createTextNode("yong")); 
     staff.appendChild(firstname); 

     // lastname elements 
     Element lastname = doc.createElement("lastname"); 
     lastname.appendChild(doc.createTextNode("mook kim")); 
     staff.appendChild(lastname); 

     // nickname elements 
     Element nickname = doc.createElement("nickname"); 
     nickname.appendChild(doc.createTextNode("mkyong")); 
     staff.appendChild(nickname); 

     // salary elements 
     Element salary = doc.createElement("salary"); 
     salary.appendChild(doc.createTextNode("100000")); 
     staff.appendChild(salary); 

     // write the content into xml file 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 
     StreamResult result = new StreamResult(new File("C:\\file.xml")); 

     // Output to console for testing 
     // StreamResult result = new StreamResult(System.out); 

     transformer.transform(source, result); 

     System.out.println("File saved!"); 

     } catch (ParserConfigurationException pce) { 
     pce.printStackTrace(); 
     } catch (TransformerException tfe) { 
     tfe.printStackTrace(); 
     } 
    } 
} 
+0

我做了這種類型的代碼,但我不能生成XML模式的XML文件,這是在我所需的XML中給出的。 – saba 2012-01-16 14:16:28

+0

感謝您的幫助,但我沒有找到任何解決方案來生成帶有模式的xml文件。我做了這種類型的代碼,但我不能用我所需的XML中給出的模式生成XML文件。 – saba 2012-01-16 14:32:19

+0

@saba模式也是一個XML所以你也可以生成那一個 – 2012-01-16 18:35:35

0

我有我的個人博客的舊帖子,概述了在Java中生成XML的幾種不同的方式:http://blogger.ziesemer.com/2007/06/xml-generation-in-java.html

基本上,一些常用的選項一起工作的JAXP,DOM,SAX(一種用於生成黑客,但它工作),StAX,XSLT或XML綁定選項(JAXB) - 我沒有在我的文章中介紹過。

由於您已經有了一個XML模式可以使用,所以JAXB可能適合您。否則,我可能會使用StAX作爲新的高效API之一。

+0

其實我讀過這個API,但是最多是喜歡jaxb api,因爲它很容易生成xml模式和xml文件並且處理能力很高,這是真的嗎? – saba 2012-01-16 14:14:43

+0

我也沒有用這個xml文件生成模式。 – saba 2012-01-16 14:22:04

+0

我讀了你的博客,它真的有幫助有很多東西我真的不知道,但我沒有找到任何解決方案來編寫一個帶schema的xml文件。如果你分享一些知識,這對我很有幫助。 – saba 2012-01-16 14:30:06