2012-01-14 28 views
8

Quiero hacer una aplicación java swing desde donde puedo generar un archivo xml que contenga los mismos datos, y el número de archivo generado será decidido por el usuario.Mi archivo xml contiene el esquema xml y mi estructura de archivo xml es el aspecto de esteGenerador de archivos Xml en java

<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> 

soy nuevo en java si alguien da algo de código Snipes ayuda, que será más útil para mí.

Quiero generar archivos xml que contengan el esquema xml que se da en mi ejemplo xml.

+1

vistazo a dom4j - http://dom4j.sourceforge.net/ intentar escribir algo de código y volver si está teniendo problemas –

+2

@GreenDay - Aunque siempre me ha gustado dom4j mejor que JDOM, a menos que exista una específica Necesito, recomiendo encarecidamente apegarse a una API estándar como JAXP, en lugar de vincular estrechamente el código a una implementación particular como dom4j. – ziesemer

Respuesta

10

En java, utiliza JAXP para trabajar con XML. Utiliza las clases relacionadas DOM para generar el xml. A continuación se muestra un pequeño ejemplo del uso de JAXP para crear 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

Hice este tipo de código pero no puedo generar el archivo xml con el esquema que se da en mi xml deseado. – saba

+0

Gracias por su ayuda, pero no encontré ninguna solución para generar un archivo xml con esquema. Hice este tipo de código pero no puedo generar el archivo xml con el esquema que se da en mi xml deseado. – saba

+0

@saba schema es también un xml, así que puede generarlo también –

0

tengo un puesto de más edad en mi blog personal que describe varias maneras diferentes de generar XML en Java: http://blogger.ziesemer.com/2007/06/xml-generation-in-java.html

Básicamente, algunas opciones comunes para trabajar con son JAXP, DOM, SAX (especie de un corte para la generación , pero funciona), StAX, XSLT o las opciones de enlace XML (JAXB), que no cubrí en mi publicación.

Dado que ya tiene un esquema XML para trabajar, JAXB puede funcionar bien para usted. De lo contrario, probablemente iría con StAX como una de las API más nuevas y eficientes.

+0

en realidad, leí sobre esta API pero el máximo es preferir jaxb api porque es fácil generar el esquema xml y el archivo xml y la potencia de procesamiento es alta ¿es cierto? – saba

+0

Tampoco he generado el esquema con este archivo xml. – saba

+0

Leí tu blog. Es muy útil. Hay tantas cosas que realmente no sé, pero no encontré ninguna solución para escribir un archivo xml con schema. Si compartes algunos conocimientos, es útil para mí. – saba

Cuestiones relacionadas