当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来 ...
随机推荐
- requestMapping之地址映射
转:http://www.cnblogs.com/qq78292959/p/3760560.html 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时, ...
- Tomcat权威指南-读书摘要系列7
配置 conf目录下的主要配置文件 server.xml Tomcat主配置文件 web.xml servlet与其他适用于整个Web应用程序设置的配置文件,必须符合servlet规范的标准格式 to ...
- Linux命令dd与cp的区别
原文链接:http://blog.csdn.net/erazy0/article/details/6087554 问:看了一些关于dd和cp的命令,但是我始终无法明白dd和cp之间有什么不同?不是都可 ...
- C#_界面程序_数码游戏
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- C - Segments POJ - 3304 (判断线段相交)
题目链接:https://vjudge.net/contest/276358#problem/C 题目大意:给你n条线段,问你是否存在一条线段使得所有的线段在这条直线的投影至少具有一个交点? 具体思路 ...
- 20165230 《Java程序设计》实验五《网络编程与安全》实验报告
20165230 <Java程序设计>实验五<网络编程与安全>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: ...
- spring事务详解(一)初探讨
一.什么是事务 维基百科:数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成.理解:事务(Transaction)是数据库区别于文件系统的重要特性之一.传 ...
- Plus One & Plus One Linked List
Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...
- 学习mysql replication gitd
- 001_chrome工具详解
一.chrome https://segmentfault.com/a/1190000000683599