XML

XML介绍

1、什么是xml?

概念:XML(EXtensible Markup Language)XML 指可扩展标记语言(EXtensible Markup Language)

可扩展:我们可以自定义,完全按照自己的规则来!

标记: 计算机所能认识的信息符号!

01.很像html

02.着重点是数据的保存

03.无需预编译

04.符合W3C标准

2、XML 命名规则

l 名称可以含字母、数字以及其他的字符

l 名称不能以数字或者标点符号开始

l 名称不能以字符 “xml”(或者 XML、Xml)开始

l 名称不能包含空格

3、XML的组成部分:

01.文档声明  <?xml version="1.0" encoding="UTF-8"?>

02.元素    <p></p>

03.属性    <p  id="haha"></p>

04.注释   <!-- --> //  /***/

05.特殊字符

06.CDATA区域  Character data   字符数据

CDATA区域: XML解析器不会处理,而是当成字符串原样输出!

<![CDATA[xml内容]]>

07.处理指令   引入css样式

4、XML 与 HTML 的主要差异

l XML 不是 HTML 的替代。

l XML 和 HTML 为不同的目的而设计:

l XML 被设计为传输和存储数据,其焦点是数据的内容。

l HTML 被设计用来显示数据,其焦点是数据的外观。

l HTML 旨在显示信息,而 XML 旨在传输信息。

5、XML注意点:

l xml文件中只能有一个根节点

l 节点要成对出现  有开发和闭合

l 节点必须正确的嵌套

l 严格区分大小写

l 空格和换行都是特殊字符 会被解析器解析

6、特殊字符:

>   >

<   <

&   &

'   '

"   "

7、XML解析的四种方式

01.DOM:基于xml文档树结构的解析,把xml文件中的内容都读取到内存中,

比较占内存,消耗资源多!

02.SAX:基于事件的解析。消耗资源小!

03.JDOM:针对于java的特定模型!满足2 8原则!自身没有解析器,依赖于SAX2!

04.DOM4J:for(4)JDOM的一个分支!源码开放,性能优异,功能强大!

8、XMLDOM树

xml,html都是一个类似于倒挂的树!

只有一个根节点,枝叶茂盛!

我们把这个倒挂的树称之为===》dom树!

DOM:(Doucument Object Model)文档对象模型!

图示:

创建第一个maven项目:

步骤如下:

1.new  project===>maven==>quick==>archetypeCatalog=internal

2.引入需要的pom节点

3.自定义一个xml文件

4.需求通过dom4j实现查询学校下面的年级以及班级信息

5.创建一个测试类 书写代码

DTD(Document Type Definition(文档定义类型)

l 01.规范我们的编码

l 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文件位置"[定义的内容]>

XML课堂练习:(增 删 改 查)

步骤:

首先创建的是xml文件。(我的例子)

<?xml version="1.0" encoding="UTF-8"?>
<clothes
  <type name=" 衣服1"
    <clothes name="连衣裙" color="白色"/>  
    <clothes name="T恤" color="蓝色"/> 
  </type>  
  <type name=" 衣服2"
    <clothes name="牛仔裤" color="黑色"/>  
    <clothes name="夹克" color="粉色"/> 
  </type>  
  <type name=" 衣服3"
    <clothes name="外套" color="蓝色"/>  
    <clothes name="短裤" color="灰色"/> 
  </type>  
  <type name="衣服4">
    <clothes name="衬衫" color="白色"/>
    <clothes name="紧身裤" color="黑色"/>
  </type>
</clothes>

然后在测试类里边写相关的代码,来实现增删改查一系列操作

可以使用dom4j的相关架包信息 所以要在pom.xml文件里写上使用的dom4j信息,以便导dom4j的架包

<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
  <groupId>dom4j</groupId>
  <artifactId>dom4j</artifactId>
  <version>1.6.1</version>
</dependency>

初始的XML文件样式

要获取dom和根节点所以需要创建一个方法 ,以在查全部的时候调用 查询

   //获取dom 和根节点
public static void getDocument()
{
SAXReader reader =new SAXReader();//创建解析器
try {
document =reader.read("src/resources/clothes.xml");//读取xml文件
root=document.getRootElement();
} catch (DocumentException e) {
e.printStackTrace();
}
}

获取dom和根节点 查看全部

 //1.查看全部
private static void findAll() {
getDocument();
//根据根节点获取子节点
Iterator <Element> types= root.elementIterator();
while(types.hasNext()){
Element type =types.next();
System.out.println("衣服的名称"+type.attributeValue("name"));
//通过type获取clothes
Iterator<Element> clothes =type.elementIterator();
//遍历clothes
while(clothes.hasNext()){
Element cloth =clothes.next();
System.out.println("衣服的款式为"+cloth.attributeValue("name"));
System.out.println("衣服的颜色为"+cloth.attributeValue("color"));
}
}
}

查看全部

运行结果:

注意:

在写删 改 修的操作时 要考虑的是 ,我们不单单是对内存中修改,我们要的是需要在xml文件里修改 所以在完成这一系列的操作时我创建一个真正保存的方法

 //真实的保存数据(字符流)
public static void save(){
//创建输出流
XMLWriter writer=null;
//编码格式
OutputFormat format=null;
try {
format=OutputFormat.createPrettyPrint();//设置格式
writer =new XMLWriter(new FileWriter("src/resources/clothes.xml"),format);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

真正的在xml进行

  //3.新增
private static void add() {
Element type =root.addElement("type");
type.addAttribute("name","衣服4");
Element cloth = type.addElement("clothes");
cloth.addAttribute("name","衬衫");
cloth.addAttribute("color","白色");
Element cloth1 = type.addElement("clothes");
cloth1.addAttribute("name","紧身裤");
cloth1.addAttribute("color","黑色");
save();
System.out.println("新增成功");
}

增加

运行结果:

 删

  //2.删除
private static void delete() {
Iterator<Element> types =root.elementIterator();//拿到根节点下的所有的字节点
while(types.hasNext()){
Element type =types.next();
if (type.attributeValue("name").equals("衣服5")){
root.remove(type);
}
}
save();
System.out.println("删除成功");
}

删除

运行结果:

   //4.修改
private static void update() {
Iterator<Element> types =root.elementIterator();//拿到所有的子节点
System.out.println("请输入需要修改的衣服名称");
String Receive =input.next();
System.out.println("请输入修改后的衣服名称");
String Receive2 =input.next();
while(types.hasNext()){
Element type =types.next();
if(type.attributeValue("name").equals(Receive)){
type.setAttributeValue("name",Receive2);
}
}
save();
System.out.println("修改成功");
}
}

修改

运行结果:

 

XML(二)的更多相关文章

  1. Java SE之XML<二>XML DOM与SAX解析

    [文档整理系列] Java SE之XML<二>XML DOM与SAX解析 XML编程:CRUD(Create Read Update Delete) XML解析的两种常见方式: DOM(D ...

  2. JavaScript操作XML(二)

    上一篇介绍了XML的结构以及节点之间的关系这一篇介绍浏览器内建的XML解析器以及JavaScript是如何加载XML的. 大多数浏览器都有读取和操作 XML 的内建 XML 解析器. 解析器(XML ...

  3. Hibernate映射文件详解(News***.hbm.xml)二

    转自 http://blog.csdn.net/a9529lty/article/details/6454924 一.hibernate映射文件的作用: Hibernate映射文件是Hibernate ...

  4. 用javascript操作xml(二)JavaScript 将XML转换成字符串(xml to string)

    function xmlToString(xmlData) { var xmlString; //IE if (window.ActiveXObject){ xmlString = xmlData.x ...

  5. Xml二(解析思想)、

    XML解析: * 解析xml可以做: * 如果xml作为配置文件:读取 * 如果xml作为传输文件:写,读 * xml解析思想: * DOM:将文档加载进内存,形成一颗dom树(document对象) ...

  6. XML二

    XML的语法要求: 1,XML文档必须有一个顶层元素,即文档元素,所有其他元素必须嵌入在文档元素中. 2,元素嵌套要正确,即如果一个元素在另一个元素中开始,那么必须在同一个元素中结束. 3,每个元素必 ...

  7. Android之使用XMLPull解析xml(二)

    转自:http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html 介绍下在Android中极力推荐的xmlpull方式解析xml.x ...

  8. XML介绍

    XML [TOC] 1.XML简介 XML是Extend Markup Langue可扩展标签语言,标签由开发着自己定义 作用是: 1.描述带关系的数据(作为软件的配置文件):包含与被包含的关系 2. ...

  9. XML增、删、改

    今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 一.简单介绍 using System.Xml; ...

  10. JavaScript操作XML

    JavaScript操作XML (一) JavaScript操作XML是通过XML DOM来完成的.那么什么是XML DOM呢?XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准 ...

随机推荐

  1. 字符串、字节数组、流之间的相互转换以及文件MD5的计算

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace myMe ...

  2. Python全栈开发-Day6-面向对象编程

    本节内容: 面向过程VS面向对象 面向对象编程介绍 类的语法 构造函数.析构函数 私有方法.私有属性 面向对象的特性:封装.继承.多态 1.面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法 ...

  3. C#动态代理

    所谓代理,就是不直接访问目标对象,而是由中间对象生成一个目标代理类,由中间代理对象来代理目标对象的方法.Java里面有JDK和CGLIB代理.C#里面则使用Castle代理.nuget引用如下: &l ...

  4. redis在php运行时出现错误

    我的redis版本:3.2.8. redis安装教程,参考官方网站: https://redis.io/download 在网上多番查找,很多说是配置文件redis.conf中的: # bind 12 ...

  5. ubuntu12.04 安装CAJViewer-ubuntu(待解决)

    ubuntu12.04测试通过 1.sudo apt-get install wine 2.unzip CAJViewer-ubuntu12.04版.zip 3.wine CAJVieweru.exe

  6. usaco Transformations

    模拟就行.注意int arr[][]二维数组在定义时是二维数组,而函数传参时是指针.这意味着memset()的不同.传参时只能当作一维逐个memset. #include <iostream&g ...

  7. loj#2020. 「AHOI / HNOI2017」礼物

    题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\ ...

  8. 6月5 Smarty自定义函数

    自定义函数:<{方法名称}> 在html页面是可以直接赋值的:(没啥作用只是知道即可) <{$a = "hello"}><div><{$a ...

  9. WCF开发实战系列一:创建第一个WCF服务 转

    转 http://www.cnblogs.com/poissonnotes/archive/2010/08/28/1811064.html 在这个实战中我们将使用DataContract,Servic ...

  10. Highcharts 配置语法

    Highcharts 配置语法 本章节我们将为大家介绍使用 Highcharts 生成图表的一些配置. 第一步:创建 HTML 页面 创建一个 HTML 页面,引入 jQuery 和 Highchar ...