目录

  • 一、导入Xml4j.rar到Idea中
  • 二、Xml4j在Java中的操纵
    • 1.在Java中读取文件的操作
      • (一).初始化
      • (二).遍历节点
      • (三).遍历得到节点中的内容
      • (四).总结
    • 2.存储已经创建好的Document树(文件保存)
    • 3.创建一个DOM4j实例
    • 4.增改操作已经在内,删除操作使用remove();方法

一、导入Xml4j.rar到Idea中

测试环境:Windows10专业版
应用软件:IntelliJ IDEA 2021.1 x64
测试时间:2022年8月21日 20点22分
File–>Project Structure…

Project Settings–>Libraries–>+
±->Java
目录–>OK

二、Xml4j在Java中的操纵

1.在Java中读取文件的操作

(一).初始化

/*** @description 将XML转为Document对象* @author Jule_zhou* @date 2022-08-20 16:38:27* @param file 文件地址* @return*/
public static Document document(File file) {SAXReader saxReader = new SAXReader();Document document = null;try {document = saxReader.read(file);} catch (DocumentException e) {e.printStackTrace();}return document;
}

附加代码

// 获取根节点
Element rootElement = document.getRootElement();

(二).遍历节点

/*** @description 遍历一个节点中的次一级所有节点* @author Jule_zhou* @date 2022-08-21 11:45:05* @param element 子一级节点List集合* @return {@link ArrayList <  Element >} 父级节点*/
static ArrayList<Element> getLastElement(Element element){// 存放节点信息ArrayList<Element> elements = new ArrayList<>();Iterator<Element> iterator = element.elementIterator();// 遍历所有次一级节点while (iterator.hasNext()){// 遍历拿取节点Element lastElement = iterator.next();// 添加节点信息,存储到List中elements.add(lastElement);}return elements;
}

主要代码说明

// 获取当前标签节点下的所有子节点标签
// 当前节点为Element element;
Iterator<Element> iterator = element.elementIterator();

(三).遍历得到节点中的内容

/*** @description 遍历标签中文本内容* @author Jule_zhou* @date 2022-08-21 12:13:58* @param element* @return {@link String} 文本*/
static String getText(Element element)throws NullPointerException{String str = "";str = element.getTextTrim();if ("".equals(str)){throw new NullPointerException("未找到文本内容!");}return str;
}

特别代码说明

// getTextTrim()方法可以去除换行,如果存在多行数据,在str会出现间隔,但仍然是一个字符串(且该字符串内不存在换行)
// getTextTrim()方法不可以去除换行,会有大量空格产生
String str = element.getTextTrim();

附加代码

// attributeValue(String)方法可获得该节点属性值,其中需要传递一个String类型的属性名称
// 在Xml文件中<body number = "000"></body>,number就是属性名称,000就是属性值
String number = element.attributeValue("number");

(四).总结

方法名 作用
SAXReader() 解析Xml文件
saxReader.read() 读取文档并返回一个文档实体类型
document.getRootElement() 获取Xml根节点
element.elementIterator(); 获取字节点
getTextTrim() 获得文本
element.attributeValue() 获得属性值

2.存储已经创建好的Document树(文件保存)

/*** @description 存储数据* @author Jule_zhou* @date 2022-08-21 22:56:59* @param document 要写入的数据Document类型* @return*/
public void write(Document document,File file){// 创建格式化OutputFormat outputFormat = OutputFormat.createPrettyPrint();// 设置编码格式outputFormat.setEncoding("UTF-8");try {// 创建写入,(创建写入方式,设定编码格式)XMLWriter xmlWrite = new XMLWriter(new FileWriter(file),outputFormat);// 写入Document文件xmlWrite.write(document);xmlWrite.flush();xmlWrite.close();} catch (IOException e) {e.printStackTrace();}

知识点附加

OutputStream带有Stream字节流
Writer,字符流,更适合于中文读写

主要代码说明

// 创建格式化
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
// 设置编码格式
outputFormat.setEncoding("UTF-8");
// 创建FileWrite的字符流写入
FileWrite fileWrite = new FileWriter(file);
// 创建写入,(创建写入方式,设定编码格式)
XMLWriter xmlWrite = new XMLWriter(fileWrite ,outputFormat);
// 使用write方法写入Document文件xmlWrite.write(document);

3.创建一个DOM4j实例

/*** @description 创建一个DOM4j实例* @author Jule_zhou* @date 2022-08-24 16:12:20* @param* @return {@link Document}*/
public Document createDocument(){// 创建一个Document对象Document document = DocumentHelper.createDocument();// 添加根节点Element rootEle = document.addElement("mobiles");// 添加子节点Element cardNumberEle = rootEle.addElement("cardNumber");// 添加cardNumberEle节点的属性cardNumberEle.addAttribute("number","0000000");// 添加cardNumber的子节点Element mobilCardEle = cardNumberEle.addElement("mobilCard");Element consumInfosEle = cardNumberEle.addElement("consumInfos");// 添加mobilCardEle的子节点Element userNameEle = mobilCardEle.addElement("userName");Element passWordEle = mobilCardEle.addElement("passWord");Element serPackageEle = mobilCardEle.addElement("serPackage");Element consumAmoutEle = mobilCardEle.addElement("consumAmout");Element moneyEle = mobilCardEle.addElement("money");Element realTalkTimeEle = mobilCardEle.addElement("realTalkTime");Element realSMSCountEle = mobilCardEle.addElement("realSMSCount");Element realFlowEle = mobilCardEle.addElement("realFlow");// 添加consumInfosEle的子节点Element consumInfoEle = consumInfosEle.addElement("consumInfo");// 添加consumInfoEle的子节点的属性consumInfoEle.addAttribute("id","0");// 添加serPackageEle的子节点Element priceEle = serPackageEle.addElement("price");Element talkTimeEle = serPackageEle.addElement("talkTime");Element smsCountEle = serPackageEle.addElement("smsCount");Element flowEle = serPackageEle.addElement("flow");// 添加consumInfosEleEle的子节点Element typeEle = consumInfoEle.addElement("type");Element consumDataEle = consumInfoEle.addElement("consumData");return document;
}

主要代码说明

// 创建一个Document对象(创建对象)
Document document = DocumentHelper.createDocument();
// 添加根节点(创建节点)
Element rootEle = document.addElement("mobiles");
// 添加子节点(创建节点)
Element cardNumberEle = rootEle.addElement("cardNumber");
// 添加cardNumberEle节点的属性(添加属性)
cardNumberEle.addAttribute("number","0000000");

4.增改操作已经在内,删除操作使用remove();方法

Java中Xml4j的使用相关推荐

  1. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  2. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

  3. java中hashcode_浅谈Java中的Hash值

    1.Hash值有什么用? HashMap.HashTable.HashSet,所以涉及到使用Hash值进行优化存储的地方,都会用到HashCode.HashCode是Key,这种计算为提高计算的性能. ...

  4. JAVA中获取当前系统时间

    JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...

  5. Java中的对象和包

    什么是对象 对象就是实际生活中的事物,可以说一切事物都是对象. 对象的三个特点 1  对象的行为:这个对象能做什么, 例如包子是用来吃的 2  对象的状态:对象保持的一种状态,例如这个包子是热的还是凉 ...

  6. java中标识符,关键字,数据类型

    什么是标识符? 在java语言中用来给一个类,变量或方法命名的符号 标识符的命名规则 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头. ...

  7. Java中byte与16进制字符串的互相转换

    https://www.cnblogs.com/qinwangchen/p/5418028.html * Convert byte[] to hex string.这里我们可以将byte转换成int, ...

  8. JAVA中priorityqueue详解

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...

  9. 使用java中replaceAll方法替换字符串中的反斜杠

    今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...

最新文章

  1. 详解通用物体检测算法:基于锚框与无需锚框
  2. apue学习笔记(第三章 文件I/O)
  3. ux设计师怎样找同类产品_UX设计师UI设计师产品设计师和UX研究人员有何不同
  4. LiveVideoStackCon 一次全新的尝试,错过了就是一辈子
  5. SAP APF tile点击之后,都发生了哪些事情
  6. iOS 开发-文件下载原理
  7. 电路设计之干扰问题总结与分析
  8. Qt工作笔记-使用QFileSystemWatcher监控文件是否改变
  9. Jmeter 使用badyboy 录制脚本
  10. String和StringBuffer的区别
  11. R语言实现混频数据分析实例----midas回归预测
  12. [Codeforces 487E]Tourists
  13. 用MFC消息映射机制自定义消息
  14. Response.Clear() Response.ClearContent()和Response.ClearHeaders()之间的区别
  15. 润土之四——构造润土的来由
  16. JavaSE集合框架-01-集合框架体系及表数据结构
  17. fastble找不到手机_Android蓝牙库FastBle的基础入门使用
  18. Android Toast提示的使用
  19. java 电子签章 开源_java操作pdf制作电子签章 - CSDN博客
  20. java之随机生成名字

热门文章

  1. qdebug打印数组所有内容_qDebug 的使用
  2. column “name” not found 错误
  3. Java四舍五入保留任意位数小数
  4. unipush消息推送测试
  5. 知乎登录js逆向及文章爬取js逆向
  6. vue3 学习之路1
  7. 数据结构不带头节点跟带头节点的单链表区别,C语言代码展示
  8. JSON常见几种压缩方式
  9. 运维工程师第一阶段windows的学习
  10. 企业邮箱价格,集团企业邮箱注册价格,买2年送2年