XMLUtil.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package cn.efunbox.base.util;
  2. import org.jdom.Document;
  3. import org.jdom.Element;
  4. import org.jdom.JDOMException;
  5. import org.jdom.input.SAXBuilder;
  6. import java.io.ByteArrayInputStream;
  7. import java.io.IOException;
  8. import java.io.InputStream;
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import java.util.Map;
  13. public class XMLUtil {
  14. /**
  15. * 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
  16. * @param strxml
  17. * @return
  18. * @throws JDOMException
  19. * @throws IOException
  20. */
  21. public static Map doXMLParse(String strxml) throws JDOMException, IOException {
  22. strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
  23. if(null == strxml || "".equals(strxml)) {
  24. return null;
  25. }
  26. Map m = new HashMap();
  27. InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
  28. SAXBuilder builder = new SAXBuilder();
  29. Document doc = builder.build(in);
  30. Element root = doc.getRootElement();
  31. List list = root.getChildren();
  32. Iterator it = list.iterator();
  33. while(it.hasNext()) {
  34. Element e = (Element) it.next();
  35. String k = e.getName();
  36. String v = "";
  37. List children = e.getChildren();
  38. if(children.isEmpty()) {
  39. v = e.getTextNormalize();
  40. } else {
  41. v = getChildrenText(children);
  42. }
  43. m.put(k, v);
  44. }
  45. //关闭流
  46. in.close();
  47. return m;
  48. }
  49. /**
  50. * 获取子结点的xml
  51. * @param children
  52. * @return String
  53. */
  54. public static String getChildrenText(List children) {
  55. StringBuffer sb = new StringBuffer();
  56. if(!children.isEmpty()) {
  57. Iterator it = children.iterator();
  58. while(it.hasNext()) {
  59. Element e = (Element) it.next();
  60. String name = e.getName();
  61. String value = e.getTextNormalize();
  62. List list = e.getChildren();
  63. sb.append("<" + name + ">");
  64. if(!list.isEmpty()) {
  65. sb.append(getChildrenText(list));
  66. }
  67. sb.append(value);
  68. sb.append("</" + name + ">");
  69. }
  70. }
  71. return sb.toString();
  72. }
  73. }