JAVA使用Dom4j实现字符串和xml文件相互转换

在文章《JAVA 使用Dom4j 解析XML》中,介绍了使用Dom44j解析XML,比如节点的解析遍历、节点的增加、删除、写入文件等操作,本文我们继续使用dom4j实现xml字符串与xml文件之间的转换。

1、xml文档或节点转换为字符串

(1)代码

[java]  view plain copy print ?
  1. //xml文档或节点转换为字符串  
  2.     @Test  
  3.     public void test5()throws Exception{  
  4.         //创建SAXReader对象  
  5.         SAXReader reader = new SAXReader();  
  6.         //读取文件 转换成Document  
  7.         Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));  
  8.         //document转换为String字符串  
  9.         String documentStr = document.asXML();  
  10.         System.out.println("document 字符串:" + documentStr);  
  11.         //获取根节点  
  12.         Element root = document.getRootElement();  
  13.         //根节点转换为String字符串  
  14.         String rootStr = root.asXML();  
  15.         System.out.println("root 字符串:" + rootStr);  
  16.         //获取其中student1节点  
  17.         Element student1Node = root.element("student1");  
  18.         //student1节点转换为String字符串  
  19.         String student1Str = student1Node.asXML();  
  20.         System.out.println("student1 字符串:" + student1Str);  
  21.     }  
(2)结果
[html]  view plain copy print ?
  1. document 字符串:<?xml version="1.0" encoding="UTF-8"?>  
  2. <students>  
  3.     <student1 id="001">  
  4.         <微信公众号>@残缺的孤独</微信公众号>  
  5.         <学号>20140101</学号>  
  6.         <地址>北京海淀区</地址>  
  7.         <座右铭>要么强大,要么听话</座右铭>  
  8.     </student1>  
  9.     <student2 id="002">  
  10.         <新浪微博>@残缺的孤独</新浪微博>  
  11.         <学号>20140102</学号>  
  12.         <地址>北京朝阳区</地址>  
  13.         <座右铭>在哭泣中学会坚强</座右铭>  
  14.     </student2>  
  15. </students>  
  16. root 字符串:<students>  
  17.     <student1 id="001">  
  18.         <微信公众号>@残缺的孤独</微信公众号>  
  19.         <学号>20140101</学号>  
  20.         <地址>北京海淀区</地址>  
  21.         <座右铭>要么强大,要么听话</座右铭>  
  22.     </student1>  
  23.     <student2 id="002">  
  24.         <新浪微博>@残缺的孤独</新浪微博>  
  25.         <学号>20140102</学号>  
  26.         <地址>北京朝阳区</地址>  
  27.         <座右铭>在哭泣中学会坚强</座右铭>  
  28.     </student2>  
  29. </students>  
  30. student1 字符串:<student1 id="001">  
  31.         <微信公众号>@残缺的孤独</微信公众号>  
  32.         <学号>20140101</学号>  
  33.         <地址>北京海淀区</地址>  
  34.         <座右铭>要么强大,要么听话</座右铭>  
  35.     </student1>  
(3)其中s.xml文件如下
[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <students>  
  3.     <student1 id="001">  
  4.         <微信公众号>@残缺的孤独</微信公众号>  
  5.         <学号>20140101</学号>  
  6.         <地址>北京海淀区</地址>  
  7.         <座右铭>要么强大,要么听话</座右铭>  
  8.     </student1>  
  9.     <student2 id="002">  
  10.         <新浪微博>@残缺的孤独</新浪微博>  
  11.         <学号>20140102</学号>  
  12.         <地址>北京朝阳区</地址>  
  13.         <座右铭>在哭泣中学会坚强</座右铭>  
  14.     </student2>  
  15. </students>  
2、xml字符串转换为Document对象

(1)代码

[java]  view plain copy print ?
  1. //xml字符串转换为Document对象  
  2.     @Test  
  3.     public void test6()throws Exception{  
  4.         String xmlStr = "<employee><empname>@残缺的孤独</empname><age>25</age><title>软件开发工程师</title></employee>";  
  5.         Document document = DocumentHelper.parseText(xmlStr);  
  6.         //写入emp1.xml文件  
  7.         writerDocumentToNewFile(document);  
  8.     }  
(2)结果
[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <employee>  
  4.   <empname>@残缺的孤独</empname>  
  5.   <age>25</age>  
  6.   <title>软件开发工程师</title>  
  7. </employee>  
3、新建Document

我们使用dom4j新建document对象,并写入文件中。

(1)代码

[java]  view plain copy print ?
  1. //新建Document对象,添加节点元素并写入文件  
  2.     @Test  
  3.     public void test7()throws Exception{  
  4.         Document document = DocumentHelper.createDocument();  
  5.         Element rootElement = document.addElement("employee");  
  6.         Element empName = rootElement.addElement("empname");  
  7.         empName.setText("@残缺的孤独");  
  8.         Element empAge = rootElement.addElement("age");  
  9.         empAge.setText("25");  
  10.         Element empTitle = rootElement.addElement("title");  
  11.         empTitle.setText("软件开发工程师");  
  12.         //写入文档emp.xml  
  13.         writerDocumentToNewFile(document);  
  14.     }  
(2)结果(emp.xml) 
[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <employee>  
  4.   <empname>@残缺的孤独</empname>  
  5.   <age>25</age>  
  6.   <title>软件开发工程师</title>  
  7. </employee>  

从上可以看出,使用dom4j可以很容易的实现xml字符串与document之间的转换,并且创建document对象变得简易。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。您可以使用dom4j来解析XML,然后将解析后的节点添加到Java的Map对象中。以下是参考示例代码: ``` import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlMapConverter { public static Map<String, Object> xmlToMap(String xmlString) { try { Map<String, Object> map = new HashMap<>(); SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xmlString.getBytes("UTF-8"))); Element root = document.getRootElement(); map.put(root.getName(), elementToMap(root)); return map; } catch (Exception e) { throw new RuntimeException(e); } } @SuppressWarnings("unchecked") private static Map<String, Object> elementToMap(Element node) { Map<String, Object> map = new HashMap<>(); List<Element> list = node.elements(); if (list.size() == 0 && node.getTextTrim().length() > 0) { map.put(node.getName(), node.getTextTrim()); } else { for (Element element : list) { if (!element.getName().equals(node.getName())) { if (map.containsKey(element.getName())) { Object obj = map.get(element.getName()); if (obj instanceof List<?>) { ((List<Element>) obj).add(elementToMap(element)); } else { List<Element> l = new ArrayList<>(); l.add((Element) obj); l.add(elementToMap(element)); map.put(element.getName(), l); } } else { map.put(element.getName(), elementToMap(element)); } } else { if (map.containsKey(node.getName())) { Object obj = map.get(node.getName()); if (obj instanceof List<?>) { ((List<Element>) obj).add(elementToMap(element)); } else { List<Element> l = new ArrayList<>(); l.add((Element) obj); l.add(elementToMap(element)); map.put(node.getName(), l); } } else { map.put(node.getName(), elementToMap(element)); } } } } return map; } } ``` 您可以将xml字符串传递给xmlToMap方法以获取Map对象。例如: ``` String xmlString = "<root><person><name>John</name><age>30</age></person></root>"; Map<String, Object> map = XmlMapConverter.xmlToMap(xmlString); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值