XML(二)

 

XML

XML介绍

1、什么是xml?

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

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

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

01.很像html

  02.着重点是数据的保存

  03.无需预编译

  04.符合W3C标准

2XML 命名规则

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

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

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

名称不能包含空格

3XML的组成部分:

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样式

4XML HTML 的主要差异

l XML 不是 HTML 的替代。

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

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

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

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

5XML注意点:

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

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

节点必须正确的嵌套

严格区分大小写

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

6、特殊字符:

>   >

<   <

&   &

'   '

"   "

7、XML解析的四种方式

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

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

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

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

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

8XMLDOM

xmlhtml都是一个类似于倒挂的树!

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

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

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

图示:

 

创建第一个maven项目:

步骤如下:

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

2.引入需要的pom节点

3.自定义一个xml文件  

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

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

DTDDocument 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和根节点所以需要创建一个方法 ,以在查全部的时候调用 查询

 1   //获取dom 和根节点
 2     public static  void getDocument()
 3     {
 4         SAXReader reader =new SAXReader();//创建解析器
 5         try {
 6             document =reader.read("src/resources/clothes.xml");//读取xml文件
 7             root=document.getRootElement();
 8         } catch (DocumentException e) {
 9             e.printStackTrace();
10         }
11     }
获取dom和根节点 查看全部
 1 //1.查看全部
 2     private static void findAll() {
 3         getDocument();
 4         //根据根节点获取子节点
 5         Iterator <Element> types= root.elementIterator();
 6         while(types.hasNext()){
 7            Element type =types.next();
 8             System.out.println("衣服的名称"+type.attributeValue("name"));
 9             //通过type获取clothes
10             Iterator<Element> clothes =type.elementIterator();
11             //遍历clothes
12             while(clothes.hasNext()){
13                 Element cloth =clothes.next();
14                 System.out.println("衣服的款式为"+cloth.attributeValue("name"));
15                 System.out.println("衣服的颜色为"+cloth.attributeValue("color"));
16             }
17         }
18     }
查看全部

运行结果:

 

注意:

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

 1 //真实的保存数据(字符流)
 2     public static  void save(){
 3         //创建输出流
 4         XMLWriter writer=null;
 5         //编码格式
 6         OutputFormat format=null;
 7         try {
 8             format=OutputFormat.createPrettyPrint();//设置格式
 9             writer =new XMLWriter(new FileWriter("src/resources/clothes.xml"),format);
10             writer.write(document);
11         } catch (IOException e) {
12             e.printStackTrace();
13         }finally {
14             try {
15                 writer.close();
16             } catch (IOException e) {
17                 e.printStackTrace();
18             }
19         }
20     }
真正的在xml进行

 1  //3.新增
 2     private static void add() {
 3         Element type =root.addElement("type");
 4         type.addAttribute("name","衣服4");
 5         Element cloth = type.addElement("clothes");
 6         cloth.addAttribute("name","衬衫");
 7         cloth.addAttribute("color","白色");
 8         Element cloth1 = type.addElement("clothes");
 9         cloth1.addAttribute("name","紧身裤");
10         cloth1.addAttribute("color","黑色");
11         save();
12         System.out.println("新增成功");
13     }
增加

运行结果:

 

 

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

运行结果:

 

 1   //4.修改
 2     private static void update() {
 3     Iterator<Element> types =root.elementIterator();//拿到所有的子节点
 4         System.out.println("请输入需要修改的衣服名称");
 5         String Receive =input.next();
 6         System.out.println("请输入修改后的衣服名称");
 7         String Receive2 =input.next();
 8         while(types.hasNext()){
 9             Element type =types.next();
10             if(type.attributeValue("name").equals(Receive)){
11                type.setAttributeValue("name",Receive2);
12             }
13         }
14         save();
15         System.out.println("修改成功");
16     }
17 }
修改

运行结果:

 

猜你喜欢

转载自www.cnblogs.com/3020815dzq/p/9247356.html