当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来 ...
随机推荐
- CSS表格均匀边框
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Ajax跨域CORS
在Ajax2.0中多了CORS允许我们跨域,但是其中有着几种的限制:Origin.Methods.Headers.Credentials 1.Origin 当浏览器用Ajax跨域请求的时候,会带上一个 ...
- Hadoop基础-MapReduce的Join操作
Hadoop基础-MapReduce的Join操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.连接操作Map端Join(适合处理小表+大表的情况) no001 no002 ...
- 加速计 & CoreMotion
CHENYILONG Blog 加速计 & CoreMotion 加速计 & CoreMotion 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微 ...
- shell tr命令
tr 命令可以对来自标准输入的字符进行替换.压缩和删除. tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备. tr 常用参数 -c # 用字符串1中字符集的补集替换此字符集 ...
- 第9月第30天 MVP
1. import UIKit struct Person { // Model let firstName: String let lastName: String } protocol Greet ...
- docker之容器访问和网络连接(三)
前言 当一台服务器上部署了多个应用容器,它们直接可能需要相互通信,比如web应用容器需要访问mysql数据库容器. 主机访问容器 通过映射端口的形式我们可以在外部访问容器内的服务 # 将主机的127. ...
- Linux使用一个定时器实现设置任意数量定时器功能【转】
转自:https://www.jb51.net/article/120748.htm 为什么需要这个功能,因为大多数计算机软件时钟系统通常只能有一个时钟触发一次中断.当运行多个任务时,我们会想要多个定 ...
- 从xtrabackup备份恢复单表【转】
目前对MySQL比较流行的备份方式有两种,一种上是使用自带的mysqldump,另一种是xtrabackup,对于数据时大的环境,普遍使用了xtrabackup+binlog进行全量或者增量备份,那么 ...
- asp.net动态增加服务器端控件并提交表单
为什么要用原生的呢? 1.目的 原生出现浏览器兼容性问题 极少,不用测试多浏览兼容性 .需要考虑到市面上的其他垃圾浏览器. 2.性能不好 如果不考虑第一条 你可以换一种方式 直接上代码 .aspx页面 ...