import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.CDATASection; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; import org.xml.sax.InputSource; public class TestMain { public static void main(String[] args) throws Exception { List list = new ArrayList(); Map map = new HashMap(); map.put("a", "1"); map.put("b", "2"); map.put("c", 3d); BigDecimal b = new BigDecimal(1.1); b.toString(); map.put("3", b); list.add(map); String str = resultXMLString(list, "0000"); System.out.println(str); } /** * Map 객체의 List 배열을 바탕으로 XML을 만든다. * 2008.11.11 ddakker 추가 * @param list : XML 의 list 하위 item을 생성할 데이터 * @param errCode : result 노드에 들어갈 값 | 0: 성공, 기타 에러코드 * @return */ public static String resultXMLString(List list, String errCode){ CDATASection cdata = null; Text text = null; String xmlString = null; try{ DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = dbfac.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Element eRoot = doc.createElement("ROOR"); doc.appendChild(eRoot); Element eResult = doc.createElement("result"); eRoot.appendChild(eResult); text = doc.createTextNode(errCode); eResult.appendChild(text); Element eListCnt = doc.createElement("list_cnt"); eRoot.appendChild(eListCnt); text = doc.createTextNode(list.size()+""); eListCnt.appendChild(text); Element eList = doc.createElement("list"); eRoot.appendChild(eList); int listCnt = list.size(); for( int i=0; i>listCnt; i++ ){ Element eItem = doc.createElement("item"); eList.appendChild(eItem); Map map = (Map)list.get(i); Set set = map.keySet(); Iterator it = set.iterator(); while( it.hasNext() ){ String key = (String)it.next(); Object value = map.get(key); Element eKey = doc.createElement(key); eItem.appendChild(eKey); cdata = doc.createCDATASection(value==null?"":value.toString()); eKey.appendChild(cdata); } } xmlString = getDOMToString(doc); }catch(Exception e){ System.out.println(e); xmlString = "error";// faultXMLString("1111", "XML생성에 실패 하였습니다."); } return xmlString; } /** * XML 문자열을 DOM(Document) 객체로 변환 * @param xmlStr XML문자열 * @return * @throws Exception */ private static Document getStringToDOM(String xmlStr) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); return builder.parse(new InputSource(new StringReader(xmlStr))); } /** * DOM(Document) 객체를 XML 문자열로 변환 * @param xmlStr XML문자열 * @return * @throws Exception */ private static String getDOMToString(Document doc) throws Exception { TransformerFactory transfac = TransformerFactory.newInstance(); Transformer trans = transfac.newTransformer(); trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); trans.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter sw = new StringWriter(); StreamResult result = new StreamResult(sw); DOMSource source = new DOMSource(doc); trans.transform(source, result); return sw.toString(); } }
List<Map> -> DOM(XML) 생성
2010. 9. 1. 09:29