2012-11-19 5 views
0

XML로 변환 할 문자열 목록이 있습니다. DOM을 사용하면 어떻게 될까요? XML을 생성하기 위해 Source으로 사용할 문자열을 사용하여 문서를 만드는 방법을 잘 모르겠습니다.문자열에서 XML 만들기

누구든지 나에게 문서를 생성하는 샘플 코드를 보여줄 수 있습니까? 나는 코드가있을 거라고 생각

ArrayList<String> fruits 

<Fruits> 
    <fruit>Apple<fruit> 
    <fruit>Grape<fruit> 
<Fruits> 

:

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

답변

3
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); 
+0

그 결과는 내가 기대 한 바가 아닙니다. 출력은' applegrapepeanut'입니다. 나는 각 과일을 별도의'' 태그 – Dan

+0

에 넣기를 원한다. 업데이트 된 답변을 살펴보고 주석을 제거하고 반복 코드를 추가했습니다. –

+0

감사합니다. 내 오류를 발견했습니다. – Dan

1

나는 이것을 위해 JAXB를 사용합니다 : 같은 는 예를 들어, XML이 될 것

@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); 
} 
+1

JAXB (JSR-222) 구현을 사용하면 'Marshaller'를 사용하여 'Transformer'대신 원하는 XML 출력에 객체를 쓸 수 있습니다. JAXB 소스에 스타일 시트를 적용 할 때 사용자가 제공하는 접근 방식이 유용합니다. http://blog.bdoughan.com/2012/11/using-jaxb-with-xslt-to-produce-html.html –

+0

@BlaiseDoughan 실제로 OP의 스 니펫 만 복사하고있었습니다. 그렇지 않으면'JAXB.marshal (fruits, System.out) '을 사용했을 것입니다. – artbristol

0

당신이 만약 정말로 "과일"목록의 문자열을 사용하여 문서를 만들고 싶습니다. 출처 :

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())));