15.javaweb XML详解教程
1, 作用:用于描述和保存现实中具有某种关系的数据,还可以作为软件配置文件,和描述程序模块之间的关系

2, 语法:
首先 先看一个XML文件的组成部分

关于文档声明

Version同时使用为w3c在2000年颁布的1.0版本,encoding指明浏览器在解析xml文件是编码,必须与xml文件保存的是编码一致,否则会出现乱码文件,因为xml文件在保存时是按照某编码规则将中文编码成二进制数,浏览器再解析的时候按照此编码可将二进制数解析成正确中文,否则将报错。
关于元素,即标签,一个xml文档中有且只有一个根标签,标签分含标签体<a>***</a>和不含标签体<a/>,标签体中的空格和换行都会被当作标签内容处理。对于标签的命名规范如下

关于属性,一个标签中可以有多个属性,属性由属性名和值组成,属性名命名规范与元素一样,小技巧”可以将一个属性改写成标签的一个子标签
关于注释:<!--注释-->,注释不能在文档声明之前,也不能嵌套
关于CDATA区

关于转义字符

关于转义与CDATA区别,转义是把XML中特殊字符显示出来给人看,CDATA是把XML中内容读给程序看
关于处理指令

应用
XML文件

结果

3, DTD约束和DTD校验
概述:在XML技术里可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束
约束分类:XML DTD,XML Schema
XML DTD

<! DOCTYPE 暑假 SYSTEM “book.dtd”> 表示引用book.tdt约束来约束XML文档的书写规范
<! ELEMENT 书架 (书+)>表示在”书架”这个标签中,可以有多个“书”子标签
<! ELEMENT 书(书名,作者,售价)>表示”书”这个标签中,应该有“书名”,“作者”,“售价”这个三个子标签
<! ELEMENT 书名 (#PCDATA)>表示”书名”这个标签中的内容应该是字符串
XML DTD文档的编写:DTD约束既可作为一个单独的文件编写,也可以XML文件内编写
上述例子即为单独文件编写,下面是在一个XML文件内编写

DTD文档的引用

DTD约束语法:元素定义,属性定义,实体定义
元素定义


属性定义

设置说明

属性值类型:枚举

属性值类型:ID

常用属性值类型

实体定义:概念

实体定义:引用实体

实体定义:参数实体

4, xml编程(CRUD)
XML解析技术

关于dom和sax的区别
dom解析是把XML的节点以文档对象的形式保存的内存中,对象之间以树的形式组织,所以dom解析适合对XML文件增删改查,但对内存消耗较大
sax解析是一行一行的读取XML文件并解析,所以sax解析对内存消耗较小,解析速度快,但不适合增删改查

调整jvm最大占用内存大小:JVM默认程序的最大可占用内存是64M,当程序运行所需内存超过了这个值就会报错
可通过如下方式设置程序运行时最大可占用内存,设置值为80M

5, JAXP解析包对XML文档进行dom解析

注意导入javax.xml.parsers包
dom解析下,xml文档的每一个组成部分都会用一个对象表示,例如标签用Element,属性用Attr,但不管什么对象都是Node的子类,所以在开发中可以获取到的任何结点都当作Node对待。
package com.chen.ying;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class paraseDemo01 {
public static void main(String[] args) throws Exception {
//1,创建工厂,得到工厂实例
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2,通过工厂得到dom解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//3,解析XML文档,得到代表文档的document对象
Document document=builder.parse("src/com/chen/ying/country.xml");//最好填写绝对路径
//4,对XML文档进行增删改查
//查询结点
NodeList list01=document.getElementsByTagName("province");//将查询结果放在Node链表中
Node node01=list01.item(1);//取得链表的第二个元素;
String content01=node01.getTextContent();//得到结点内容
System.out.println("查询到的省份信息:"+content01);
//遍历所有结点
Node node02=document.getElementsByTagName("country").item(0);//得到根结点
listAll(node02);//递归遍历
//查询指定结点的指定属性,如果已知查询结果是元素,则可以直接用Element接收,这样操作更丰富准确
Element element01=(Element)document.getElementsByTagName("province").item(0);//取得“四川”结点
String value=element01.getAttribute("id");//由属性名得到属性值
System.out.println(value);
//向XML"四川"结点中添加结点:<city>遂宁</city>
Element city=document.createElement("city");
city.setTextContent("遂宁");//创建结点并向结点添加内容
Element province01=(Element)document.getElementsByTagName("province").item(0);
province01.appendChild(city);//将创建的结点挂到指定的节点下
//向指定位置处添加节点:<city>丽江</city>
Element insertCity=document.createElement("city");
insertCity.setTextContent("丽江");//创建结点并向结点添加内容
//得到挂子节点
Element province02=(Element)document.getElementsByTagName("province").item(1);
//得到位置参考节点
Element localCity=(Element)province02.getElementsByTagName("city").item(1);
//向挂子节点的指定位置插入节点
province02.insertBefore(insertCity, localCity);
//为指定节点添加属性
element01.setAttribute("mainCity", "成都");//为“四川”节点添加属性
//删除指定节点和属性:删除指定节点需要找到这个节点和这个节点的·父节点
Element province03=(Element)document.getElementsByTagName("province").item(2);
province03.getParentNode().removeChild(province03);
//更新结点内容:找到需要更新的节点然后重新设置内容
Element city01=(Element)document.getElementsByTagName("city").item(0);
city01.setTextContent("绵阳");
//将更新后的内存写回XML文档所在硬盘区
TransformerFactory tfactory=TransformerFactory.newInstance();
Transformer tf=tfactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new FileOutputStream("src/com/chen/ying/country.xml")));
}
public static void listAll(Node node) {
if(node instanceof Element){//如果结点是元素则打印(解析时会将一个结点内所有内容解析成对象)
System.out.println(node);
}
NodeList list=node.getChildNodes();//得到一个结点下的所有子结点,包括空格
for(int i=0;i<list.getLength();i++){
listAll(list.item(i));//递归遍历
}
}
}
XML文档
<?xml version="1.0" encoding="UTF-8"?>
<country>
<province id="四川"> <!--省份-->
<city>成都</city>
<city>广安</city>
<city>南充</city>
</province>
<province id="云南">
<city>楚雄</city>
<city>昆明</city>
<city>大理</city>
</province>
<province id="浙江">
<city>杭州</city>
<city>宁波</city>
</province>
</country>
案例练习,用xml文件作为数据库保存学生成绩等信息,然后用DAO的方式进行增删改查
6, sax解析

15.javaweb XML详解教程的更多相关文章
- Linux计划任务Crontab实例详解教程
说明:Crontab是Linux系统中在固定时间执行某一个程序的工具,类似于Windows系统中的任务计划程序 下面通过详细实例来说明在Linux系统中如何使用Crontab 操作系统:CentOS ...
- Ant 之bulid.xml详解
ANT build.xml文件详解(一) Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令.当编译Linux内核及一些软件的 ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- MyBatis Mapper XML 详解
MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...
- Jmeter(十八) - 从入门到精通 - JMeter后置处理器 -下篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
- Iperf3网络性能测试工具详解教程
Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...
- 【山外笔记-工具框架】iperf3网络性能测试工具详解教程
[山外笔记-工具框架]iperf3网络性能测试工具详解教程 本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...
- 《手把手教你》系列技巧篇(二十八)-java+ selenium自动化测试-处理模态对话框弹窗(详解教程)
1.简介 在前边的文章中窗口句柄切换宏哥介绍了switchTo方法,这篇继续介绍switchTo中关于处理alert弹窗的问题.很多时候,我们进入一个网站,就会弹窗一个alert框,有些我们直接关闭, ...
- 《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
1.简介 上一篇中,宏哥说的宏哥在最后提到网站的反爬虫机制,那么宏哥在自己本地做一个网页,没有那个反爬虫的机制,谷歌浏览器是不是就可以验证成功了,宏哥就想验证一下自己想法,于是写了这一篇文章,另外也是 ...
随机推荐
- Java历程-初学篇 Day09 冒泡排序
冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...
- FPGA多时钟处理应用
FPGA项目设计中,通常会遇到多时钟处理.即一个PLL输出多个时钟,根据条件选择合适的时钟用作系统时钟.方案一: 外部晶振时钟进入PLL,由PLL输出多个时钟,MUX根据外部条件选择时钟输出做为系统使 ...
- WPF加载程序集中字符串资源
WPF资源 WPF资源使用其实的也是resources格式嵌入资源,默认的资源名称为"应用程序名.g.resources",不过WPF资源使用的pack URI来访问资源. 添加图 ...
- hadoop streaming编程小demo(python版)
大数据团队搞数据质量评测.自动化质检和监控平台是用django,MR也是通过python实现的.(后来发现有orc压缩问题,python不知道怎么解决,正在改成java版本) 这里展示一个python ...
- 【特效】单选按钮和复选框的美化(只用css)
表单的默认样式都是比较朴素的,实际页面中往往需要美化他们.这里先说说单选按钮和复选框,有了css3,这个问题就变的好解决了.利用input与label相关联,对label进行美化并使其覆盖掉原本的in ...
- Django实现简单分页功能
使用django的第三方模块django-pure-pagination 安装模块: pip install django-pure-pagination 将'pure_pagination'添加到s ...
- 初学python之,IDLE安装
首先新手上路,写的第一篇博客,希望大家不要吐槽. 1.首先在python官网下载最新python版本 https://www.python.org/(注意根据自己的操作系统来选版本) 安装很简单傻瓜式 ...
- word2vec 数学原理
word2vec 是 Google 于 2013 年推出的一个用于获取词向量的开源工具包.我们在项目中多次使用到它,但囿于时间关系,一直没仔细探究其背后的原理. 网络上 <word2vec 中的 ...
- 个人怎么申请微信小程序
1.打开微信公众平台(mp.weixin.qq.com).拉到中间的"账号分类",鼠标悬浮于"小程序"框中并点击"查看详情". 2.进入微信 ...
- LINUX 笔记-重定向 :<,<<,>,>>
command>filename 把标准输出重定向到一个新文件中 command>>filename 把标准输出重定向到一个文件中(追加) command 1>filena ...