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)文档对象模型!

特殊字符:

>   &gt;
< &lt;
& &amp;
' &apos;
" &quot;

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的更多相关文章

  1. 【Java】XML解析之DOM4J

    DOM4J介绍 dom4j是一个简单的开源库,用于处理XML. XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP,使用需要引用dom4j.jar包 ...

  2. Java 读写XML文件 API--org.dom4j

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...

  3. java创建XML及开源DOM4J的使用

    java import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; imp ...

  4. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  5. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  6. java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解     1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  7. Java进阶(二十七)使用Dom4j解析XML文件

    使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

  8. Java解析XML之Dom4j

    Java解析XML文件的方法有多种,个人感觉最常用的是使用Dom4j来解析XML文件.下面就简单介绍下Dom4j的基础使用. Dom4j需要jar包的支持,大家可以从网络上下载,如dom4j-1.6. ...

  9. 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来 ...

随机推荐

  1. IO之间的比较

    在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步 ...

  2. shell中exec命令

    1.find中的-exec参数 在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行 find ./ -name "*.txt" -ex ...

  3. HTML培训课程-------Day02(表格和框架)

    表格 在网页中表格是一种经常使用到得设计结构,就像表格的内容中可以包含任何的数据,如文字.图像.表单.超链接.表格等等,所有在HTML中可以使用的数据,都可以被设置在表格中,所以有关表格设置的标记与属 ...

  4. 带你正确的使用List的retainAll方法求交集

    一. retainAll 方法 public boolean retainAll(Collection<?> c) { //调用自己的私有方法 return batchRemove(c, ...

  5. 网络_OSI模型_数据包传输

    2017年1月12日, 星期四 网络_OSI模型_数据包传输 1.  网络_源主机_局域网_交换机_路由器_目标主机 2. OSI7七层_TCP/IP精简 OSI 7层:       应用层     ...

  6. 略显犀利的 js 判断闰年

    /** * 判断闰年函数 * @param {number} year 要判断的年份 * @return {bool} 返回布尔值 * * 其实只要满足下面几个条件即可. * 1.普通年能被4整除且不 ...

  7. 【整理】HTML5游戏开发学习笔记(3)- 抛物线运动

    1.预备知识(1)Canvas旋转的实现过程 window.onload = function(){ var ctx = document.getElementById('canvas1').getC ...

  8. 使用JavaScript缓存图片

    在JS中,为了让图片缓存起来,客户端JS定义了一个API,首先利用Image()构造函数来创建一个屏幕外图片对象,之后将该对象的src属性设置 期望的URL,由于图片元素并没有添加到文档中,因此它是不 ...

  9. 如何用Procmon.exe来监视SQLSERVER的logwrite大小

    如何用Procmon.exe来监视SQLSERVER的logwrite大小 在微软亚太区数据库技术支持组官方博客里面,你会发现很多篇文章都用到了Procmon.exe这个工具 今天我也介绍一下这个工具 ...

  10. linux(CentOS7)中安装erlang(20.3)以及rabbitmq(3.7.9)的步骤以及一些注意事项

    首先下载安装包,之后先安装erlang,安装erlang需要很多依赖,所以一步步来: 首先 wxWidgets会报错,这个不是必须的,可以不安装,不影响 然后需要安装一些必须的依赖: yum inst ...