当Java遇到XML 的邂逅+dom4j
XML简介:
XML:可扩展标记语言!
01.很象html
02.着重点是数据的保存
03.无需预编译
04.符合W3C标准
可扩展:我们可以自定义,完全按照自己的规则来!
标记: 计算机所能认识的信息符号!
int num=5; 教材编号
XML的组成部分:
01.文档声明 <?xml version="1.0" encoding="UTF-8"?>
02.元素 <p></p>
03.属性 <p id="haha"></p>
04.注释 <!-- -->
05.特殊字符
06.CDATA区域 Character data 字符數據
07.处理指令 引入css样式
<phone>
<brand name="小米">
<edition name="1.0">
<hehe>hehe</hehe>
<hehe>为发骚而生</hehe>
</edition>
<edition name="2.0"/>
</brand>
<brand name="华为">
<edition name="1.0"/>
<edition name="2.0"/>
</brand>
<brand name="苹果">
<edition name="1.0"/>
<edition name="2.0"/>
</brand>
</phone>
注意点:
01.xml文件中只能有一个根节点
02.节点要成对出现 有开发和闭合
03.节点必须正确的嵌套
04.严格区分大小写
05.空格和换行都是特殊字符 会被解析器解析
xml,html都是一个类似于倒挂的树!
只有一个根节点,枝叶茂盛!
我们把这个倒挂的树称之为===》dom树!
DOM:(Doucument Object Model)文档对象模型!
特殊字符:
> >
< <
& &
' '
" "
CDATA区域:
XML解析器不会处理,而是当成字符串原样输出!
语法:
<![CDATA[xml内容]]>
创建第一个maven项目:
1.new project===>maven==>quick==>archetypeCatalog=internal
2.引入需要的pom节点
3.自定义一个xml文件 (学校 年级 班级)
4.需求通过dom4j实现查询学校下面的年级以及班级信息
5.创建一个测试类 书写代码
具体操作请看:
https://www.cnblogs.com/lsy131479/p/9237154.html
解析xml文件的方式:
01.DOM:基于xml文档树结构的解析,把xml文件中的内容都读取到内存中,
比较占内存,消耗资源多!
02.SAX:基于事件的解析。消耗资源小!
03.JDOM:针对于java的特定模型!满足2 8原则!自身没有解析器,依赖于SAX2!
04.DOM4J:for(4)JDOM的一个分支!源码开放,性能优异,功能强大!
DOM4J解析xml
1. 导入dom4j jar包

解析代码:
package com.metro.util; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Scanner; /**
* @author 房上的猫
* @create 2018-06-28 11:42
* @博客地址: https://www.cnblogs.com/lsy131479/
* <p>
* 测试
**/ public class Test {
static Scanner input = new Scanner(System.in);
static Document doc = null;
static Element root = null;
//常量路径
static final String URL = "src/main/resources/phone.xml";
//主程序
public static void main(String[] args) { System.out.println("***1.查询所有");
System.out.println("***2.修改");
System.out.println("***3.删除");
System.out.println("***4.添加");
System.out.print("*************请选择:");
int choose = input.nextInt();
getDocument();
System.out.println("==============start==============");
switch (choose) {
case 1:
Iterator<Element> brands = root.elementIterator();
findAll(brands, 0);
break;
case 2:
up();
break;
case 3:
del();
break;
case 4:
add();
break;
}
System.out.println("==============exit==============");
}
//添加
private static void add() {
Element brand = root.addElement("brand");
brand.addAttribute("name", "hehe");
Element edition = brand.addElement("edition");
edition.addAttribute("name", "xx");
edition.addText("ssss");
saveXML();
}
//删除
private static void del() {
Iterator<Element> brand = root.elementIterator();
while (brand.hasNext()) {
Element next = brand.next();
// System.out.println(next.attributeValue("name"));
if (next.attributeValue("name").equals("haha")) {
root.remove(next);
}
}
saveXML();
}
//修改
private static void up() {
Iterator<Element> brand = root.elementIterator();
while (brand.hasNext()) {
Element next = brand.next();
// System.out.println(next.attributeValue("name"));
if (next.attributeValue("name").equals("hehe")) {
next.setAttributeValue("name", "haha");
}
}
saveXML();
}
//保存xml
private static void saveXML() {
XMLWriter writer = null;
OutputFormat format = null; try {
format = OutputFormat.createPrettyPrint();
writer = new XMLWriter(new FileWriter(URL), format);
writer.write(doc);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//查询所有
private static void findAll(Iterator<Element> brands, int count) {
String t = "";
//设置缩进
for (int i = 0; i < count; i++) {
t += "\t";
}
while (brands.hasNext()) {
Element brand = brands.next();
System.out.println(t + "name:" + (brand.attributeValue("name") == null ? "" : brand.attributeValue("name")));
System.out.println(t + "text:" + brand.getTextTrim());
//预先构建子节点迭代器
Iterator<Element> iterator = brand.elementIterator();
//递归
findAll(iterator, ++count);
} } //初始化
public static void getDocument() {
SAXReader reader = new SAXReader();
try {
doc = reader.read(URL);
root = doc.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
DTD:
Document Type Definition(文檔類型定義)
01.规范我们的编码
02.在浏览器中正常的显示
<!ELEMENT school (grade+),(class|student)>
ELEMENT :元素,关键字
school:元素名称
grade:子元素或者元素类型 CDATA PCDATA (Parse)解析数据,不能包含子元素
():用来给元素分组
| :两者必须选择一个
+ : 1-N,至少出现一次
* : 0-N,可有可无,并且可以多次
?: 0|1,最多一次
,:元素出现的顺序
DTD文档使用方式:
01.内部DTD
<!DOCTYPE 根元素[定义的内容]>
02.外部DTD
<!DOCTYPE 根元素 SYSTEM "dtd文件位置">
02.内外部DTD
<!DOCTYPE 根元素 SYSTEM "dtd文件位置"[定义的内容]>
DTD例子:
xml文件抬头:
<!DOCTYPE phone SYSTEM "phone.dtd">
phone.dtd 约束文件:
<!ELEMENT phone (brand*)>
<!ELEMENT brand (edition*) >
<!ATTLIST brand name CDATA "XX">
<!ELEMENT edition (hehe*) >
<!ATTLIST edition name CDATA "XX">
<!ELEMENT hehe (#PCDATA) >
<!ATTLIST hehe name CDATA "XX">
<!--
#PCDATA:被解析的字符数据
CDATA:默认值
*:出现0或多次
+:出现最少一次
-->
my.html 测试文件:
仅兼容低版本IE
<html>
<head>
<!--自己编写一个简单的解析工具,去解析XML DTD是否配套-->
<script language="javascript">
// 创建xml文档解析器对象
var xmldoc =new ActiveXObject("Microsoft.XMLDOM"); // 开启xml校验
xmldoc.validateOnParse = "true";
// 装载xml文档,即指定校验哪个XML文件
xmldoc.load("phone.xml");
document.writeln("错误信息:"+xmldoc.parseError.reason+"<br>");
document.writeln("错误行号:"+xmldoc.parseError.line);
</script> </head>
<body> </body>
</html>
总结:
1.xml html
2.特点,注意事项
3.maven项目创建的注意点
4.手写xml
5.解析xml的几种方式
6.dom4j解析的步骤
当Java遇到XML 的邂逅+dom4j的更多相关文章
- 【Java】XML解析之DOM4J
DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...
- Java 读写XML文件 API--org.dom4j
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...
- java创建XML及开源DOM4J的使用
java import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; imp ...
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)
java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...
- Java进阶(二十七)使用Dom4j解析XML文件
使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...
- Java解析XML之Dom4j
Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6. ...
- XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...
随机推荐
- Java实现POS打印机自定义无驱打印
Java实现POS打印机自定义无驱打印 热敏打印机使用越来越广泛,而安装驱动相当复杂,万幸的是,几乎所有的热敏打印机都支持ESC/P指令,参考网络上一些资料后,在此整理了一份自定义打印的方案 • 打印 ...
- Qt ------ UDP发送不了或接收不到问题
1.禁用不需要的网卡,比如禁用虚拟机网卡. 2.向所有网卡广播数据 /* * 直接调用 QUdpSocket 的 writeDatagram() 函数发送数据,如果有多张网卡(装了虚拟机会增加网卡), ...
- Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...
- 「Vue」登陆-路由拦截器
1.main.js设置拦截器 router.beforeEach(function (to,from,next) { if (to.meta.requireAuth) { if (store.stat ...
- JVM调优命令-jstat
JVM Statistics Monitoring Tool,是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载.内存.垃圾收集.JIT编译等运行数据.[性能分析] 命令格式 1 ...
- [iOS]Xcode+GitHub远程代码托管(GIT, SVN)
先来看看什么是代码远程托管: 其实就是将我们的代码上传到GitHub的服务器上, 供别人下载, 当然了也可以在团队开发的时候, 使用GitHub进行代码合并工作, 下面我们进入正题 (已经有远程仓库的 ...
- CentOS 编译 GCC 7.2
CentOS 编译 GCC 7.2 下载源码 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0. ...
- iOS数据库操作之coredata详细操作步骤
CHENYILONG Blog iOS数据库操作之coredata详细操作步骤 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/ ...
- mysql8.0 在window环境下的部署与配置
今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置,额,因为我window的那台服务器配置相对高些.本人技术 ...
- 一个完整的Installshield安装程序实例-转
一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(一)---基本设置一 前言 Installshield可以说是最好的做安装程序的商业软件之一,不过因为功能的太过于强大,以至于 ...