(五)DOM4j进行XML文件的解析及生成

DOM4j本身还是需要使用SAX建立解析器,然后通过文档依次找到根节点,再通过根节点查找每一个节点的内容.

1.写操作

import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

 public static void main(String[] args) {
  // 1.创建文档
  Document doc = DocumentHelper.createDocument();
  // 2.定义节点及子节点
  Element addresslist = doc.addElement("addresslist");
  Element linkman = addresslist.addElement("linkman");
  // 定义子节点
  Element name = linkman.addElement("name");
  Element email = linkman.addElement("email");

  // 3.设置节点内容
  name.setText("祖国");
  email.setText("mxzer3200@126.com");

  // 4.设置输出格式
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("GBK"); // 设置输出编码
  // 输出xml
  try {
    XMLWriter writer = new XMLWriter(new FileOutputStream(new File("e:"+ File.separator + "dom4j2.xml")), format);
    writer.write(doc);
    writer.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
}

生成的xml文件已格式排列的:

 

 

 

2.读操作

/**
* 读操作
* 使用SAX建立解析器,然后通过文档依次找到根节点,然后通过根节点找到每一个节点的内容。
*/
public static void main(String[] args) {
  // 1.读取文件
  File file = new File("e:" + File.separator + "dom4j2.xml");
  // 2.建立SAX解析读取
  SAXReader reader = new SAXReader();
  // 3.读取文档
  Document doc = null;
  try {
    doc = reader.read(file);
  } catch (DocumentException e) {
    e.printStackTrace();
  }
  // 4.获取根元素
  Element root = doc.getRootElement();
  // System.out.println(root.getName());
  Iterator it = root.elementIterator(); // 获取全部子节点
  while (it.hasNext()) {
    Element linkman = (Element) it.next();
    System.out.println("姓名:" + linkman.elementText("name"));
    System.out.println("邮箱:" + linkman.elementText("email"));
  }
}

 

3.解析xml方式2

<?xml version="1.0" encoding="UTF-8"?>
<Response service="ConfirmService">
  <Head>ERR</Head>
  <ERROR code="4001">系统发生数据错误或运行时异常</ERROR>
</Response>

String xml = "<?xml version=\'1.0\' encoding=\'UTF-8\'?><Response service=\"ConfirmService\"><Head>ERR</Head><ERROR code=\"4001\">系统发生数据错误或运行时异常</ERROR></Response>";
System.out.println(xml);
Map<String, String> map = parseXml(xml);
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
  Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
  System.out.println(entry.getKey() + ": " + entry.getValue());
}

/**
* 解析XML
* @param parseXml
* @return
*/
private static Map<String, String> parseXml(String parseXml) {
  Map<String, String> map = new HashMap<String, String>();
  String resultHeader = "";
  String errorCode = "";
  String errorDetail = "";

  try {
    // Parse Xml
    Document document = DocumentHelper.parseText(parseXml);
    // Parse Header
    List<Element> list = document.selectNodes("//" + "Head");
    if (list != null && list.size() > 0) {
      Element e = list.get(0);
      List<Element> els = e.elements();
      if (els.size() == 0) {
        resultHeader = e.getText().trim();
      }
    }
  // Parse Error
  list = document.selectNodes("//" + "ERROR");
  if (list != null && list.size() > 0) {
    Element e = list.get(0);
    List<Element> els = e.elements();
    if (els.size() == 0) {
      errorCode = e.attributeValue("code");
      errorDetail = e.getTextTrim();
    }
  }
  } catch (Exception e) {
    resultHeader = "ERR";
    errorCode = "9999";
    errorDetail = "XML解析错误:" + e.getMessage();
  }

  // Set Map
  map.put("header", resultHeader);
  map.put("errCode", errorCode);
  map.put("errDetail", errorDetail);
  return map;
}

 

转载于:https://www.cnblogs.com/mxzer/p/6423066.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统基础.作业

要求以root用户登录系统&#xff0c;右击桌面打开终端&#xff0c;查看当前登陆Linux系统所使用的用户名 查看哪些用户在系统上工作 修改当前时间为2018年8月26号11:28 查看2015年10月份日历 使用两种方法查看ls命令的使用说明 清除屏幕 ctrlL使用“useradd tom”命令新建tom用…

Alsa中PCM参数设置

分类&#xff1a; LINUX 1) PCM设备的句柄.2) 指定同时可供回放或截获的PCM流的方向3) 提供一些关于我们想要使用的设置选项的信息,比如缓冲区大小,采样率,PCM数据格式等4) 检查硬件是否支持设置选项.4.1) 初始化PCM变量4.2) 分配hwparams结构4.3) 打开PCM设备4.4) 以声卡的全部…

java5

java基础&#xff08;五&#xff09;命名规则&#xff1a; 名字中只能包含->字母、_、数字、$&#xff0c;且开头不能为数字包名必须都小写文件名首字母和后面英文文件单词首字母都要大写变量和方法名 首字母小写&#xff0c;后面英文单词首字母大写java中的方法&#xff1a…

最新历史版本 :H.265

原来对264有深入的研究&#xff0c;现在想详细了解下265啦&#xff0c;愿265尽快广泛的使用起来&#xff0c;人们可以享受无处不在的视觉盛宴。 H.265是ITU-T VCEG 继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264&#xff0c;保留原来的某些技术…

凯撒密码、GDP格式化输出、99乘法表

1.恺撒密码的编码 sinput(请输入明文:) print(密文为:) for i in s:print(chr(ord(i)3),end)运行结果为&#xff1a; 2.国家名称 GDP总量&#xff08;人民币亿元&#xff09; 中国 &#xffe5;765873.4375 澳大利亚 &#xffe5; 78312.4375 &#xff08;国家名称左对齐&am…

【BZOJ3453】XLkxc [拉格朗日插值法]

XLkxc Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss]Description 给定 k,a,n,d,p  f(i)1^k2^k3^k......i^k  g(x)f(1)f(2)f(3)....f(x)  求(g(a)g(ad)g(a2d)......g(and))mod p Input 第一行数据组数&#xff0c;(保证小于6)  以下每行四个整数 …

hive安装

雷顿学院大数据雷顿学院大数据&#xff1a;http://www.leidun.site/hive安装下载hivehttp://mirror.bit.edu.cn/apache/hive/下载后解压配置命令将hive加入命令vim ~/.bash_profile添加如下命令export HIVE_HOME/usr/local/Cellar/hive/1.2.1/libexec保存文件mysql数据库驱动cu…

Alsa驱动分析(转)

1. Abstract 2. Introduction 3. 音频驱动框架介绍 3.1 音频设备的注册 3.2 音频驱动的注册 3.2.1 Probe函数的调用 3.2.2 Soc_probe函数 4. 通常的使用流程的分析 4.1.1 open过程介绍 4.1.2 snd_pcm_hw_params流程分析 4.1.3 …

[BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理

1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 850 Solved: 539[Submit][Status][Discuss]Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs con…

DDR工作原理

DDR SDRAM全称为Double Data Rate SDRAM&#xff0c;中文名为“双倍数据流SDRAM”。DDR SDRAM在原有的SDRAM的基础上改进而来。也正因为如此&#xff0c;DDR能够凭借着转产成本优势来打败昔日的对手RDRAM&#xff0c;成为当今的主流。本文只着重讲讲DDR的原理和DDR SDRAM相对于…

智能故事机方案简介

智能故事机&#xff0c;又叫WiFi故事机&#xff0c;AI故事机&#xff0c;通过WiFi联网&#xff0c;用户语音就可以跟它进行问答、点歌等互动&#xff1b;由于联网所以可以播放云端海量的儿童音频内容&#xff1b;手机端在微信公众号或者专属APP上操作&#xff0c;可以点播相应内…

weui-switch开关控件,表单提交后如何取值

最近在学习weui这个框架&#xff0c;做了一些小的试验&#xff0c;发现weui-switch控件直接提交不能获取到表单信息&#xff0c;在segmentfault上发现也有人提了这个问题&#xff0c;有人说可以设置一个隐含标签来捕获开关的状态&#xff0c;试了一下&#xff0c;确实可以&…

麦克风设计指导与选型参考

随着语音识别技术的成熟&#xff0c;智能音箱类产品的火爆&#xff0c;越来越多的产品可以升级为语音交互产品&#xff1b; 下面简单介绍下此类产品的语音前端--麦克风阵列设计相关注意事项&#xff1a; 线性四麦阵列构型&#xff1a;如上图所示&#xff0c;麦克风直线等距摆…

云计算在未来一定是不可或缺的

2019独角兽企业重金招聘Python工程师标准>>> 在2018京东云合作伙伴大会上&#xff0c;京东云总裁申元庆表示&#xff0c;技术发展的大趋势是“分久必合&#xff0c;合久必分”循环往复的波动&#xff0c;近十年来云计算的发展将算力、存储、带宽全部集中在中央部分&…

智能音箱 之 音频通路质量--测试与参数

一、概述 当将语音识别算法接入到设备时&#xff0c;务必要保证设备的音频通路具有足够的质量。因此对设备进行音频测试&#xff0c;以评估能够影响语音识别性能的音频前端的音频参数。如下要点对语音识别至关重要&#xff1a; 自然声音合适的增益良好的信噪比一致的响应&…

Python学习 - 常用模块(二)

目录 一. 常用模块 - hashlib 二. 常用模块 - hmac 三. 常用模块 - logging 四. 常用模块 - re 五. 常用模块 - requests 六. 常用模块 - paramiko 一. 常用模块 - hashlib hash: 一种算法, 3.x里代替了md5模块和sha模块, 主要提供 SHA1, SHA224, SHA256, SHA384, SHA512, MD5 …

UART介绍

1. 概述 UART, Universal Asynchronous Receiver-Transmitter, 通用异步收发器&#xff1b; 串口&#xff1a;在嵌入式里指的是UART口&#xff0c;常用TTL电平即3.3V或者5.0V&#xff1b; COM口&#xff1a;在台式机上常用的口&#xff0c;DB9那种接口&#xff0c;接口协议只…

mongodb环境安装

1、mongodb安装 我采用的是离线安装&#xff0c; &#xff08;1&#xff09;在mongodb的官方网址下载所需要的版本。我下载的是 mongodb-linux-x86_64-ubuntu1604-3.4.5.tgz 。 &#xff08;2&#xff09;下载后解压缩到待安装目录&#xff0c;我这里下载在了Downloads目录…

IIC 总线接口详细介绍

1. 概述 IIC Inter Integrated-Circuit 总线是PHLIPS公司推出的一种串行总线&#xff0c;是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线&#xff0c;它支持多主控(multimastering)&#xff0c;其中任何能够进行发送和接收的设备都可以成为主总线。…

Android JNI开发系列(二)HelloWorld

2019独角兽企业重金招聘Python工程师标准>>> 入门HelloWorld 新建项目 Configure your new project部分选中 Include C Support 复选框 Next 正常填写所有其他字段并完成向导接下来几个部分 在向导的Customize C Support 部分&#xff0c;您可以使用谢列选项自定…