Dom4J 使用流程、拾遗
来源:互联网 发布:沈阳网络方面的兼职 编辑:程序博客网 时间:2024/06/05 08:16
解析xml时,可以使用的技术很多,但纵向比较下来,其实在Java中使用Dom4J 进行xml读取其实已经足够,在google上查阅资料后,得出的结论便是Dom4J最好使,所以现在记一笔。关于SAX,Dom,JDom怎么样,我不在赘述,有需要的朋友可以去一下博客仔细阅读,各取所需。地址如下:
JAVA读XML:sax,dom,jdom,dom4j的比较以及选择
使用Dom4J需要引入的jar包,如果想优雅地找到推荐看我的另一篇博客
Java jar包查找攻略
使用Dom4J进行解析关键代码
//使用SAXReader对文件进行读取 SAXReader saxReader = new SAXReader(); File file = new File("data.xml"); //将XML内容读取到document对象中 Document document = saxReader.read(file);
以下列xml代码为例,做演示。data.xml
<?xml version="1.0" encoding="UTF-8"?><save-data> <now-status> <correct-num>11</correct-num> <incorrect-num>11</incorrect-num> <spare-num>20</spare-num> <now-position>22</now-position></now-status><total-num>149</total-num></save-data>
解析该xml代码
//获取根节点下的所有子节点 save-data -> now-status/total-numList<?> nodeList = document.getRootElement().elements();for (Object o : nodeList) {Element element = (Element) o;//若无子节点则可读出当前结点的值if (!element.isTextOnly()){ List<?> childElements = element.elements();//获取根节点下的第二层元素中的子节点 now-status -> correct-num/incorrect-num/spare-num/now-position for (Object childElement : childElements) { System.out.println(((Element)childElement).getName()+":"+((Element)childElement).getText()); }}else { //读出total-num的值 System.out.println(element.getName()+":"+element.getText()); }}
输出结果为
correct-num:11 incorrect-num:11 spare-num:20 now-position:22 total-num:149
进行优化后,使用迭代进行所有节点值的访问,在这里我使用HashMap进行存储,如果是多个相同对象的XML,请使用其他的方式进行存储,否则会覆盖原来对象的值。迭代方式代码:
public static Map<String, String> getChild(Element element){ Map<String, String> valueMap = new HashMap<>(); Iterator<Node> childNodes = element.nodeIterator(); while (childNodes.hasNext()){ Node node = childNodes.next(); if (node instanceof Element){ Element e = (Element) node; if (e.isTextOnly()){ valueMap.put(e.getName(), e.getText()); }else { //迭代 合并迭代后的值 valueMap.putAll(getChild(e)); } }}return valueMap;}
dom4j 对XML文件进行某个属性值的修改,并且完成存储关键代码
//可根据XML结点深度,自行放置参数,并完成修改值和保存XMLpublic static void modifyNode(Document document, String nowVal, String... keyValues) throws IOException, DocumentException { Element targetElement = document.getRootElement().element(keyValues[0]);for (int i = 1; i < keyValues.length; i++) { targetElement = targetElement.element(keyValues[i]); if (i == keyValues.length-1){ targetElement.setText(nowVal); }}//设置好修改的数据后,要将修改的xml保存到原文件中//指定文件输出位置FileOutputStream out = null;try { out = new FileOutputStream(filePath); OutputFormat format = OutputFormat.createPrettyPrint();//标准化布局,适合查看时显示。 //创建写入文件并指定文件格式 format.setEncoding("utf-8"); XMLWriter writer = new XMLWriter(out,format); //写入文件 writer.write(document); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }}
XML中,Node和Element的区别:来自StackOverflow:
What’s the difference between an element and a node in XML?
A node can be an element node, an attribute node, a text node, or any
other of the node types explained in the “Node types” chapter.
大意:一个node可以是element node ,一个attribute node, 一个 text node, 或者一些其他“Node types”所描述的node 类型.
An XML element is everything from (including) the element’s start tag
to (including) the element’s end tag.
大意:一个XML element 是涵盖了所有元素的起始标签和结束标签。就范围而言:element>node
若有理解错误之处,烦请指出,谢谢!
阅读全文
0 0
- Dom4J 使用流程、拾遗
- dom4j的使用流程和常用方法
- 简单说明dom4j的使用流程和常用方法
- VIM使用技巧拾遗
- 数据库使用拾遗
- AD9使用技巧拾遗
- MySQL使用拾遗
- MySQL使用拾遗
- Android Activity使用拾遗
- ContentProvider使用拾遗
- Python-使用拾遗
- dom4j使用
- dom4j 使用
- DOM4J 使用
- Dom4J使用
- DOM4J使用
- Dom4j使用
- dom4j使用
- MongoDB aggregate,mapreduce,聚合命令的区别
- Android 6.0 解决recyclerview 在 scrollview 中不能全部显示,高度不正常的问题
- 在Ubuntu14.04上下载NDK和使用OLLVM混淆
- 【转】排除被冲销的物料凭证
- linux常用命令
- Dom4J 使用流程、拾遗
- [IoC容器Unity]第一回:Unity预览
- ES6中class与symbol简介
- 基于 MTCNN/TensorFlow 实现人脸检测
- c++中的引用
- 字符串分割 strtok strtok_r strsep
- 输入设备--宏BITS_TO_LONGS (数组位图操作) —内核源文件input.h分析
- 关于JqueryUI个别属性
- boosting增强学习