XML工具类

水深无声 2023-02-18 14:27 10阅读 0赞
  1. import org.dom4j.Document;
  2. import org.dom4j.DocumentException;
  3. import org.dom4j.DocumentHelper;
  4. import org.dom4j.Element;
  5. import javax.xml.bind.JAXBContext;
  6. import javax.xml.bind.JAXBException;
  7. import javax.xml.bind.Marshaller;
  8. import javax.xml.bind.Unmarshaller;
  9. import java.io.ByteArrayOutputStream;
  10. import java.io.StringReader;
  11. import java.util.ArrayList;
  12. import java.util.Iterator;
  13. import java.util.List;
  14. /** * @author JZ * @createTime 2020-06-18 14:27 */
  15. public class XmlUtils {
  16. /** * Object转XML * * @param object * @return * @throws Exception */
  17. public static String ObjectToXml(Object object) throws Exception {
  18. JAXBContext context = JAXBContext.newInstance(object.getClass()); // 获取上下文对象
  19. Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象
  20. marshaller.setProperty(Marshaller.JAXB_ENCODING, "GB2312"); // 设置编码字符集
  21. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进
  22. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  23. marshaller.marshal(object, baos);
  24. String xmlObj = new String(baos.toByteArray()); // 生成XML字符串
  25. return xmlObj.trim();
  26. }
  27. /** * Object转XML * * @param object * @return * @throws Exception */
  28. public static String ObjectToXmlUtf8(Object object) throws Exception {
  29. JAXBContext context = JAXBContext.newInstance(object.getClass()); // 获取上下文对象
  30. Marshaller marshaller = context.createMarshaller(); // 根据上下文获取marshaller对象
  31. marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); // 设置编码字符集
  32. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化XML输出,有分行和缩进
  33. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  34. marshaller.marshal(object, baos);
  35. String xmlObj = new String(baos.toByteArray()); // 生成XML字符串
  36. return xmlObj.trim();
  37. }
  38. /** * XML转Object * * @param xmlStr * @param classz * @return */
  39. public static Object XmlToObject(String xmlStr, Class classz) {
  40. try {
  41. JAXBContext context = JAXBContext.newInstance(classz);
  42. Unmarshaller unmarshaller = context.createUnmarshaller();
  43. Object object = unmarshaller.unmarshal(new StringReader(xmlStr));
  44. return object;
  45. } catch (JAXBException ex) {
  46. ex.printStackTrace();
  47. return null;
  48. }
  49. }
  50. /** * xml格式字符串获取所有子节点存入list,每个List分两个部分:name和value,中间用“:”隔开 * * @param srcXml * @return */
  51. public static List<String> getListXML(String srcXml) {
  52. //存储xml元素信息的容器
  53. List<Leaf> elemList = new ArrayList<>();
  54. List<String> list = new ArrayList<>();
  55. Document srcdoc = null;
  56. try {
  57. srcdoc = DocumentHelper.parseText(srcXml);
  58. } catch (DocumentException e) {
  59. e.printStackTrace();
  60. }
  61. Element elem = srcdoc.getRootElement();
  62. getElementList(elem, elemList);
  63. for (Iterator<Leaf> it = elemList.iterator(); it.hasNext(); ) {
  64. Leaf leaf = it.next();
  65. list.add(leaf.getName() + ":" + leaf.getValue());
  66. }
  67. return list;
  68. }
  69. /** * 递归遍历方法 * * @param element */
  70. public static void getElementList(Element element, List<Leaf> elemList) {
  71. List elements = element.elements();
  72. if (elements.size() == 0) {
  73. //没有子元素
  74. //String xpath = element.getPath();
  75. String xpath = element.getName();
  76. String value = element.getTextTrim();
  77. Leaf leaf = new Leaf(xpath, value);
  78. elemList.add(leaf);
  79. } else {
  80. //有子元素
  81. for (Iterator it = elements.iterator(); it.hasNext(); ) {
  82. Element elem = (Element) it.next();
  83. //递归遍历
  84. getElementList(elem, elemList);
  85. }
  86. }
  87. }
  88. static class Leaf {
  89. private String name;
  90. private String value;
  91. public String getName() {
  92. return name;
  93. }
  94. public void setName(String name) {
  95. this.name = name;
  96. }
  97. public String getValue() {
  98. return value;
  99. }
  100. public void setValue(String value) {
  101. this.value = value;
  102. }
  103. public Leaf(String name, String value) {
  104. this.name = name;
  105. this.value = value;
  106. }
  107. }
  108. }

发表评论

表情:
评论列表 (有 0 条评论,10人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java XML解析工具

    Java XML解析工具类 Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类 本身是有个需求,讲三方公司的XML请求

    相关 轻松解析XML工具

    \[b\]\[color=green\]\[size=large\]在我们的各种项目中,XML文件读取与解析非常频繁,正是因为有了XML文件,才使得我们的程序架构更加灵活,我们