1.Document

导入dom4j的步骤

  1. 去官网下载 zip 包。http://www.dom4j.org/
  2. 在项目中创建一个文件夹:lib
  3. 将dom4j-2.1.1.jar文件复制到 lib 文件夹
  4. 在jar文件上点右键,选择 Add as Library -> 点击OK
  5. 在类中导包使用

得到Document对象

步骤:

文件Contact.xml放在src目录下

  1. 创建一个SAXReader对象,用于读取 xml 文件
  2. 从类路径下加载xml文件,得到输入流对象
  3. 通过 SAXReader对象的read(InputStream in )方法,从输入流中读取,生成文档对象

代码

/**1. 得到文档对象2. 得到根元素*/public static void main(String[] args) throws FileNotFoundException, DocumentException {//1. 创建类: 读取XML文件SAXReader reader = new SAXReader();//不建议这么写//FileInputStream in = new FileInputStream("D:\\IdeaWork\\JavaEE105\\day23-xml\\src\\Contacts.xml");//src目录就是编译以后的类路径,从类路径下得到输入。InputStream in = Demo3Document.class.getResourceAsStream("/Contacts.xml");//2.通过reader来读取xml, 生成了一个document对象Document document = reader.read(in);//3. 输出文档System.out.println(document);//4. 得到文档以后,通过文档得到根元素Element rootElement = document.getRootElement();System.out.println(rootElement);}

Document常用方法

方法名 功能说明
Element getRootElement() 通过文档对象得到根元素
String getName() 获取元素名
List<Element> elements() 获取所有子元素
List<Element> elements(String name) 获取知名名字的多个子元素

2.Attribute

Attribute常用方法:

方法名 功能说明
String getName() 得到属性的名字
String getValue() 得到属性的值

得到属性值的两种方式

  1. 先得到Attribute对象,再通过Attribute对象得到属性的值
  2. 通过方法attributeValue()直接得到属性值

案例:

  1. 使用2种方式,得到contact上id属性值
  2. 在contact元素上添加一个vip的属性值为true/false,得到contact上所有的属性名和属性值

效果

代码:

 public static void main(String[] args) throws DocumentException {//1. 创建SAXReaderSAXReader reader = new SAXReader();//2. 调用read 方法,读取 xml 文件Document document = reader.read(Demo4Attribute.class.getResourceAsStream("/Contacts.xml"));//3. 得到根元素Element rootElement = document.getRootElement();//4. 获得第1个contact元素对象Element contact = rootElement.element("contact");//5. 通过方式1:得到contact上id属性值Attribute idAttr = contact.attribute("id");String idValue = idAttr.getValue();System.out.println(idValue);//6. 通过方式2:得到contact上id属性值String id = contact.attributeValue("id");System.out.println(id);//7. 得到contact上所有的属性名和属性值List<Attribute> attributes = contact.attributes();for (Attribute attribute : attributes) {System.out.println("属性名:" + attribute.getName());System.out.println("属性值:" + attribute.getValue());}}

获取文本内容
通过元素对象得到文本字符串得到文本元素的前提:先得到元素对象

  • 注意:

空格、换行、制表符:也是属于文本的一部分,所以在解析xml文件的时候,格式化XML文件要注意。

元素中得到文本有关的方法

Element**元素中的方法 说明
String getText() 得到元素中文本
String elementTextTrim(元素名) 得到子元素中文本,去掉先后空格
String elementText(元素名) 得到子元素中文本

需求
得到第1个contact中的name元素,输出name元素的文本。分别通过下面三个方法得到:

  1. 通过getText()方法得到
  2. 直接得到元素的内容
  3. 得到去掉空格的文本

代码;

public static void main(String[] args) throws DocumentException {// 1.创建SAXReaderSAXReader reader = new SAXReader();// 2.调用read 方法,读取 xml 文件Document document = reader.read(Demo5Text.class.getResourceAsStream("/Contacts.xml"));// 3.得到根元素Element rootElement = document.getRootElement();// 得到contact标签Element contact = rootElement.element("contact");// 得到name标签中的文本Element name = contact.element("name");System.out.println(name.getText());// 得到子元素的文本System.out.println(contact.elementText("name"));// 得到子元素的文本并且去掉前后空格System.out.println(contact.elementTextTrim("name"));}

XML解析案例

目标

利用 Dom4j 的知识,将Contact.xml 文件中的联系人数据封装成List集合,其中每个元素是实体类Contact。打印输出 List 中的每个元素。

运行效果

数据准备

Contact.xml

<?xml version="1.0" encoding="UTF-8"?>
<contactList><contact id="1"><name>潘金莲</name><gender>女</gender><email>panpan@itcast.cn</email></contact><contact id="2"><name>武松</name><gender>男</gender><email>wusong@itcast.cn</email></contact><contact id="3"><name>武大狼</name><gender>男</gender><email>wuda@itcast.cn</email></contact>
</contactList>
Contact.java实体类
 //  联系人实体类
public class Contact {private int id;private String name;private String gender;private String email;//  省略构造方法get、set、tostring}

代码:

public static void main(String[] args) throws DocumentException {//1. 得到SaxReaderSAXReader reader = new SAXReader();//2. 得到文档对象Document document = reader.read(Demo6Contact.class.getResourceAsStream("/Contact.xml"));//3. 得到根元素Element rootElement = document.getRootElement();//4. 创建集合List<Contact> list = new ArrayList<>();//5. 得到所有联系人List<Element> contactElements = rootElement.elements();//每个就是一个联系人for (Element contactElement : contactElements) {//创建一个联系人Contact contact = new Contact();//System.out.println(contactElement.getName());  //打印标签名//得到id属性值,将字符串转成int类型int id = Integer.parseInt(contactElement.attributeValue("id"));contact.setId(id);//得到子元素中文本contact.setName(contactElement.elementText("name"));contact.setGender(contactElement.elementText("gender"));contact.setEmail(contactElement.elementText("email"));//将当前对象添加到集合中list.add(contact);}//打印集合中所有的联系人for (Contact contact : list) {System.out.println(contact);}}

xml中的Document和Attribute相关推荐

  1. xslt中的Javascript取得xml中的参数

    xslt中的Javascript取得xml中的参数 使用xslt解析xml的时候,需要把xml中的参数传到javascript中, 可以用xslt作为中转, xsl: <input type=& ...

  2. java中用jdom 如何创建xml文档/将数据写入XML中

    JDomOutput.java代码如下 -------------------------------------------------------------------------------- ...

  3. java jsp js xml_jsp实现将信息放入xml中的方法

    本文实例讲述了jsp实现将信息放入xml中的方法.分享给大家供大家参考,具体如下: 一.jsp代码: 省: 北京 广东 海南 市: 北京 二.ajax代码创建服务器请求代码不用写了,写onchange ...

  4. html页面提交数据,利用servlet接收数据并写进xml中

    需求如下:  * 需求  * 完成用户注册效果.  具体要求:  1)用户输入信息:用户名,密码,确认密码,性别,出生日期,电子邮箱,地址 .  2)用户输入信息后,调用相关的XML操作类,把数据保存 ...

  5. 使用xslt将.xml,转换成一个html网页时中文显示乱码怎么办,用dom将数据写到xml中 设置xml文件gbk编码时中文会出现乱码...

    问题:我用dom将数据写到xml中 设置xml文件的编码格式是gbk时再dos下运行jar包中文会出现乱码 如下: 代码如下: StringWriter strWtr = new StringWrit ...

  6. Ant build.xml中的各种变量

    http://blog.csdn.net/hittata/article/details/4744653 Ant环境变量分为四种: 1.      build.properties文件中定义的变量 2 ...

  7. 在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样...

    [参考]:maven pom.xml加载不同properties配置[转] 首先 看看效果: 点开我们项目中的Maven projects 后,会发现右侧 我们profile有个可勾选选项.默认勾选l ...

  8. Xml中SelectSingleNode方法中的xpath用法

    最常见的XML数据类型有:Element, Attribute,Comment, Text.Element, 指形如<Name>Tom<Name>的节点.它可以包括:Eleme ...

  9. android package.xml,Android自动化编译设置AndroidManifest.xml中package值(包名)

    手动修改Android的AndroidManifest.xml中package值(包名)很简单,手动修改即可.但是项目中需要把Android的项目源代码放到服务器端在客户下载时候动态编译生成,且生成的 ...

最新文章

  1. 获取当前正在执行的方法的名称
  2. jar包反编译成源代码_IntelliJ IDEA 如何设置自动下载源代码和文档
  3. 动态规划算法-03背包问题
  4. ES5-拓展 箭头函数的this、this的优先级
  5. Oracle入门(十五)之数据库锁
  6. 加入rtp组播_耗时10+小时撰写 带你系统认识组播 收藏这些概念
  7. 这顶海贼王的帽子,我Python给你带上了 | 【人脸识别应用】
  8. 这几个5.20表白代码发给你女神,还没有女朋友直接来找我!
  9. 模拟集成电路设计(拉扎维)第四章学习笔记
  10. OpenWrt开发必备软件模块——网络管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
  11. 图文展示目标检测的现代发展历史
  12. 如何提高自身数学分析水平?
  13. 高等数学Mathematica实验题——2.2 - 16. 欧拉常数的计算(Calculation of EulerGamma Constant)
  14. 感谢同事的临别赠言,愿自己一路顺风。
  15. 推荐:碎碎念情境记忆法——最适合程序员的背单词方法
  16. 怎样转换WPS格式,WPS怎么转换PPT格式
  17. 【EasyRL学习笔记】第九章 Actor-Critic 演员-评论员算法
  18. 即食水产消费品公司“不等食品”获千万元级A轮融资,险峰长青领投...
  19. 如何使用Elasticsearch构建强大的搜索和分析应用程序(2023年最新ES新手教程)
  20. vip2-day22 MySQL 基础语句

热门文章

  1. maya python 开根号_maya python
  2. 输入法画面_仙剑奇侠传X百度输入法联名纪念版皮肤今日上线
  3. android 页面整体滑动,ScrollView 实现页面整体滑动
  4. NoSQL和传统数据库的区别
  5. 紫金计算机网络,南京理工大学紫金学院《计算机网络技术》考试复习题集试题(卷)(含答案解析)2.doc...
  6. python 二维码_Python提取支付宝和微信支付二维码
  7. 【OpenCV 例程200篇】65. 图像锐化——Scharr 算子
  8. A4.2021年全国数学建模竞赛A题-赛题分析与评阅要点(FAST主动反射面的形状调节)
  9. mxnet安装(Jetson)
  10. python中strip是什么意思啊_python中的strip是什么意思