2014-03-06 6 views
0

Я видел много программ, где XML-документы могут быть созданы с использованием Java с указанными полями. Мне еще предстоит встретить тот, где пользователь может определить имена rootElement и childEelement. Кто-нибудь знает, как это сделать?Создание XML-документа с использованием Java

+0

Что именно вы имеете в виду _with указано fields_ ? [Вот простой пример] (http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/) использования 'DocumentBuilder' для создания DOM. –

+0

Определите свою интерпретацию «полей XML» и «XML-элементов», потому что по вашей формулировке кажется, что вы думаете, что это разные вещи? –

+0

http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/ – Pshemo

ответ

3

Используйте XStream

Java Code

XStream xstream = new XStream(); 
xstream.alias("person", Person.class); 
xstream.alias("phonenumber", PhoneNumber.class); 

Person joe = new Person("Joe", "Walnes"); 
joe.setPhone(new PhoneNumber(123, "1234-456")); 
joe.setFax(new PhoneNumber(123, "9999-999")); 

String xml = xstream.toXML(joe); 

Выходной XML

<person> 
    <firstname>Joe</firstname> 
    <lastname>Walnes</lastname> 
    <phone> 
    <code>123</code> 
    <number>1234-456</number> 
    </phone> 
    <fax> 
    <code>123</code> 
    <number>9999-999</number> 
    </fax> 
</person> 

Библиотека: http://x-stream.github.io/tutorial.html

2

Проверьте этот пример, вы можете получить xml в конце примера, используя парсер JDOM.

Creating an XML document using Java

JDOM пример для создания XML-файла.

import java.io.FileWriter; 
import java.io.IOException; 
import org.jdom.Attribute; 
import org.jdom.Document; 
import org.jdom.Element; 
import org.jdom.output.Format; 
import org.jdom.output.XMLOutputter; 

public class WriteXMLFile { 
    public static void main(String[] args) { 

     try { 

     Element company = new Element("company"); 
     Document doc = new Document(company); 
     doc.setRootElement(company); 

     Element staff = new Element("staff"); 
     staff.setAttribute(new Attribute("id", "1")); 
     staff.addContent(new Element("firstname").setText("yong")); 
     staff.addContent(new Element("lastname").setText("mook kim")); 
     staff.addContent(new Element("nickname").setText("mkyong")); 
     staff.addContent(new Element("salary").setText("199999")); 

     doc.getRootElement().addContent(staff); 

     Element staff2 = new Element("staff"); 
     staff2.setAttribute(new Attribute("id", "2")); 
     staff2.addContent(new Element("firstname").setText("low")); 
     staff2.addContent(new Element("lastname").setText("yin fong")); 
     staff2.addContent(new Element("nickname").setText("fong fong")); 
     staff2.addContent(new Element("salary").setText("188888")); 

     doc.getRootElement().addContent(staff2); 

     // new XMLOutputter().output(doc, System.out); 
     XMLOutputter xmlOutput = new XMLOutputter(); 

     // display nice nice 
     xmlOutput.setFormat(Format.getPrettyFormat()); 
     xmlOutput.output(doc, new FileWriter("c:\\file.xml")); 

     System.out.println("File Saved!"); 
     } catch (IOException io) { 
     System.out.println(io.getMessage()); 
     } 
    } 
} 

Созданный XML-файл находится ниже.

<?xml version="1.0" encoding="UTF-8"?> 
<company> 
    <staff id="1"> 
    <firstname>yong</firstname> 
    <lastname>mook kim</lastname> 
    <nickname>mkyong</nickname> 
    <salary>199999</salary> 
    </staff> 
    <staff id="2"> 
    <firstname>low</firstname> 
    <lastname>yin fong</lastname> 
    <nickname>fong fong</nickname> 
    <salary>188888</salary> 
    </staff> 
</company> 

Спасибо ..

0

Вот пример того, как сделать это. Разумеется, есть много способов его достижения. Этот использует JAXB. (Java XML Binding)

http://www.mkyong.com/java/jaxb-hello-world-example/

Это сейчас очень простой пример. JAXB хорошо, потому что вы аннотировать POJO, используя стандартный Java:

import java.io.File; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class SimpleXML { 
    String name; 
    int id; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public static void main(String args[]) throws JAXBException { 
     File xmlFile = new File("C:/temp/test.xml"); 

     SimpleXML xml = new SimpleXML(); 
     xml.setId(4); 
     xml.setName("TestName"); 

     JAXBContext context = JAXBContext.newInstance(SimpleXML.class); 
     Unmarshaller unmarshaller = context.createUnmarshaller(); 
     Marshaller marshaller = context.createMarshaller(); 

     //write to file 
     marshaller.marshal(xml, xmlFile); 

     //read from file 
     SimpleXML newXML=(SimpleXML)unmarshaller.unmarshal(xmlFile); 

     System.out.println(newXML.id); 
     System.out.println(newXML.name); 
    }  
} 

Это exmaple создает экземпляр SimpleXML и записывает это в файл. Этот файл выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<simpleXML><id>4</id><name>TestName</name></simpleXML> 

После этого файл снова считывается в другом экземпляре SimpleXML. Все значения сохранены.

JAXB дает вам много возможностей для настройки вывода XML (имена тегов, имена атрибутов, конвертер данных и прочее).

Смежные вопросы