通过JDOM实现XML与String的相互转换
2015-12-21 22:56
549 查看
利用JDOM实现XML与String之间的相互转换:
package com.util.xml; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.StringReader; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; /** * 通过JDOM解析XML文件 将字符串格式的XML文件转换为XML的document * */ // 将String转换成XML public class XMLUtils { public static Document str2XML(String string) throws Exception { SAXBuilder buider = new SAXBuilder(); Document document = buider.build(new StringReader(string)); return document; } //将XML转换成String输出 public static String xml2Str(String file) throws Exception { SAXBuilder builder = new SAXBuilder(); Document document = builder.build(new FileInputStream(new File(file))); Format format = Format.getCompactFormat(); format.setEncoding("UTF-8");// 设置xml文件的字符为UTF-8,解决中文问题 XMLOutputter xmlout = new XMLOutputter(); ByteArrayOutputStream bo = new ByteArrayOutputStream(); xmlout.output(document, bo); return bo.toString().trim(); } // 将XML以键值对的形式输出,对于有两层以上的XML文件 public static Map<String, String> paraseXML(String file) throws Exception { Map<String, String> map = new HashMap<String, String>(); SAXBuilder builder = new SAXBuilder(); Document document = builder.build(new File(file)); Element root = document.getRootElement(); List<Element> list = root.getChildren(); for (Iterator<Element> iterator = list.iterator(); iterator.hasNext();) { Element firstChild = iterator.next(); List<Element> secondElements = firstChild.getChildren(); for (Iterator<Element> iterator2 = secondElements.iterator(); iterator2 .hasNext();) { Element secondElement = iterator2.next(); map.put(secondElement.getName(), secondElement.getText()); } } return map; } public static void main(String[] args) throws Exception { String str = "<students><Student><name>zhangsan</name><age>18</age><name>lisi</name><age>28</age></Student></students>"; Document document = str2XML(str); Element root = document.getRootElement(); System.out.println(root.getName()); System.out.println(root.getChildText("name")); XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat() .setIndent(" ")); FileOutputStream fos = new FileOutputStream(new File( "date\\string2xml.xml")); outputter.output(document, fos); fos.close(); String xmlContent = xml2Str("date\\string2xml.xml"); System.out.println("XML的内容为: "+ "\n" + xmlContent); Map<String, String> xmlMap = new HashMap<String, String>(); xmlMap = paraseXML("date\\string2xml.xml"); Set<String> keysSet = xmlMap.keySet(); for(String key: keysSet){ String value = xmlMap.get(key); System.out.println(key + " = " + value); } } }
相关文章推荐
- Lake Counting(DFS) POJ No.2386
- 【郑轻】[1757]Wrz and Latiao
- 克隆虚拟机出现Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization
- Gnuplot画个心形
- Gnuplot学习笔记
- 第20章 DLL高级技术(3)
- 【高效程序员系列】2、别做机器人——让工作自动化
- bzoj2127 happiness
- 卡片问题
- win7 ubuntu安装及卸载
- android-USB Host
- 数字与中文数字串互转
- java的reflect
- 【待解决】An internal error occurred during: "Launching baiduTest1". java.lang.NullPointerException
- C++Builder组件
- BZOJ 1046: [HAOI2007]上升序列 LIS -dp
- beta分工
- 暴力英语学习法 + 严格的目标管理 = 成功快速靠谱的学好英语
- HDU 2222 Keywords Search(AC自动机)
- LeakCanary: 让内存泄露无所遁形