Reputation: 8513
I have a list of strings that i want to convert to xml. How would I do so using DOM? I'm not sure how to create a Document using the strings to use as a Source
to generate the XML.
Can anyone show me a sample code to generate a Document? For example the XML would be like:
ArrayList<String> fruits
<Fruits>
<fruit>Apple<fruit>
<fruit>Grape<fruit>
<Fruits>
I think the code would be:
TransformerFactory transFact = TransformerFactory.newInstance();
Transformer serializer = transFact.newTransformer();
Properties props = new Properties();
props.put("method", "xml");
props.put("indent", "yes");
serializer.setOutputProperties(props);
Source source = new DOMSource(document); //need to create a document
Result result = new StreamResult(PrintWriter);
Upvotes: 0
Views: 171
Reputation: 7415
ArrayList<String> a = new ArrayList<String>();
a.add("apple"); a.add("mango");
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element root = doc.createElement("Fruits");
doc.appendChild(root);
for(String name: a){
Element fruit = doc.createElement("fruit");
fruit.appendChild(doc.createTextNode(name));
root.appendChild(fruit);
}
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:\\file.xml"));
transformer.transform(source, result);
Upvotes: 3
Reputation: 32397
I would use JAXB for this:
@XmlRootElement(name = "Fruits")
@XmlAccessorType(XmlAccessType.FIELD)
public static class Fruits
{
@XmlElement(name = "fruit")
public List<String> fruit = new ArrayList<String>();
}
public static void main(String[] args) throws Exception
{
Fruits fruits = new Fruits();
fruits.fruit.add("Apple");
fruits.fruit.add("Grape");
TransformerFactory transFact = TransformerFactory.newInstance();
Transformer serializer = transFact.newTransformer();
Properties props = new Properties();
props.put("method", "xml");
props.put("indent", "yes");
serializer.setOutputProperties(props);
Source source = new JAXBSource(JAXBContext.newInstance(Fruits.class), fruits);
Result result = new StreamResult(System.out);
serializer.transform(source, result);
}
Upvotes: 1
Reputation: 135992
if you really want to create a Document using strings in "fruits" list as a Source:
StringBuilder sb = new StringBuilder();
for(String s : fruits) {
sb.append(s).append('\n');
}
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
Document doc = f.newDocumentBuilder().parse(new InputSource(new StringReader(sb.toString())));
Upvotes: 0