zoukankan      html  css  js  c++  java
  • 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 }
    修改

    运行结果:

     

  • 相关阅读:
    有效的完全平方数
    除自身以外数组的乘积leetcode
    三个数的最大乘积 leetcode
    不同的二叉搜索树
    fenzhi
    leetcode二分查找之大于给定元素的最小元素744. Find Smallest Letter Greater Than Target (Easy)
    leetcode二分查找之求开方
    总结U-Net网络及他的变体
    451. Sort Characters By Frequency (Medium) 按照字符出现次数对字符串排序(leetcode排序)
    记一次 PHP调用Java Webservice
  • 原文地址:https://www.cnblogs.com/3020815dzq/p/9247356.html
Copyright © 2011-2022 走看看