XML

作者: 东风谷123Liter | 来源:发表于2018-12-07 12:03 被阅读0次

XML: eXtendsible markup language

作用:用来保存数据(少量数据)

可以用来配置文件
数据传输体(客户端<--->服务端),就像登入失败或成功都会返回数据,这些数据不仅仅只是“成功”或者“失败”

  • 文档结构:倒状的树状图
  • 声明或者定义XML:
  • 文档声明:<? XML version="1.0" ?> version:解析这个XML的时候,使用哪个版本解析的。
  • encoding: 解析文档使用的编码,也就是浏览器的解码格式。
  • 电脑上的文件再保存的时候,并不是存储文字,而是二进制;识别二进制就用编码来识别。
  • 小知识:ANSI(微软设计的,默认的本地编码)<---->gbk
  • gb2312, GBK. (GBK 是gb2312的升级版;支持繁体字)
  • 建议使用UTF-8
  • standalone: no - 该文档以来关联其他文档, yes--表示该文档是以恶独立文档
  • 元素(标签):
  • 文档声明下面必须是 根标签
  • 标签嵌套
  • 空标签:</img>即是开始标签,又是结束标签。
  • 标签里面的名字可以自己随便写。

命名规则: image.png

转义字符: image.png

注释: <!-- This is a comment -->

CDATA:

1, 如果某段字符串里面有过多的字符,并且里面包含了类似标签或者关键字的这种文本,不像让XML的解析器去解析。那么可以使用CDATA来包装。不过这个CDATA一般比较少看到,通常用在服务端给客户端返回数据的时候用到。
2, 格式: <des><![CDATA[<a herf = "http://www/baidu.com">百度一下吧</a>]]></des>
3, CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束

XML的解析:

XML的解析方式:

1,DOM:doument object model 把所有的文档读到内存当中,形成树状结构。
(1)整个文档称之为document对象,文本也可以称之为Text对象,以上所有的对象都可以称之为Node节点。如果XML特别大,那么将会造成内存的溢出。
(2)可以对文档进行增删操作

2,SAX:Simple API for Xml 基于时间驱动。读一行,解析一行。
(1) 不会造成内存溢出。
(2)不可以进行增删,只能查询。
(3)一些组织或公司,针对以上两种解析方式,给粗解决方案有哪些?
(4)jaxp sun公司
(5)jdom
(6)jom4j 使用比较广泛

代码实现:

先倒入dom4j.jar文件;jdk里面没有这个文件
遇到的错误:[图片上传失败...(image-470edd-1544147814292)]


image.png

工程里面有一个大的“!”号,一般都是因为重复导入jar文件引起的; buildPath出错,查看buildPath Library就可以发现和更改错误。jar文件尽量单个单个导入,不要多个jar文件夹的压缩格式。

  • 入门代码:
    package com.xieliting.xml;
    import java.io.File;
    import java.util.List;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.dom4j.Document;
    public class xml_dom4j {
        public static void main(String[] args) {
            //1, 创建sax读取对象
            try {
                SAXReader reader = new SAXReader();  //类似于jdbc: classloader
    
                //2, 指定解析的XML源
                Document document = reader.read(new File("src/xml/demo.xml"));
    
                //3.得到元素
    
                //得到根元素
                Element rootElement = document.getRootElement();
    
                //获得根元素下面的元素 age name
                Element stu = rootElement.element("stu");
                String age = stu.element("age").getText();
                String name = stu.element("name").getText();
                System.out.println("name:"+name+" age:"+age);
    
                //获取所有的子元素、子孙元素
                List<Elementelements = rootElement.elements();
    
                //遍历所有的子元素
                for (Element element : elements) {
                    List<Elementsubelements = element.elements();
        
                    //遍历所有的子孙元素
                    for (Element subelement : subelements) {
                        System.out.print(subelement.getName()+"  ");
                        System.out.println(subelement.getText());
                    }
                }
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 结果:


    image.png


XML的高级应用:

  • dom4j里面支持Xpath的写法。xpath其实是xml的路径语言,支持我们为你在解析xml的时候,能够快速定位到具体的某个元素。

  • Interface Xpath (Xpath接口提供了一些方法)


    image.png
  • 这些方法的参数需要遵循一套规则


    image.png
  • 它也需要额外添加jar文件 image.png
  • 路径:F:\BaiduNetdiskDownload\09.XML&tomcat(共28集)\code&资料\资料\xml\dom4j-1.6.1\lib (我自己的)

  • 代码(用法)如下:

    package com.xieliting.xml;
    import java.io.File;
    import java.util.List;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.dom4j.Document;
    public class xml_Xpath {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
        
            //1, 创建sax读取对象
            try {
                SAXReader reader = new SAXReader();  //类似于jdbc: classloader
                
                //2, 指定解析的XML源
                Document document = reader.read(new File("src/xml/demo.xml"));
                
                //3.得到元素
                //得到根元素
                Element rootElement = document.getRootElement();
                
                //获得根元素下面的元素 age name
                Element name_Element = (Element)rootElement.selectSingleNode("/stus/stu/name");
                System.out.println(name_Element.getText());
                
                //获取所有的子元素、子孙元素
                List<Element> subelements = rootElement.selectNodes("/stus/stu/*");
                
                //遍历所有的子元素
                for (Element subelement : subelements) {
                    System.out.println(subelement.getText());
                }
            } catch (DocumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
  • 结果:


    image.png

XML约束:(了解 )

DTD

  • 语法自成一派,早起就出现了,可读性也比较差。需要stus.dtd约束文件。


    image.png
    image.png

在里面约束:

![image.png](https://img.haomeiwen.com/i8043783/1f069bb39fa33dea.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 元素个数:
    • +:1个或多个
    • *:0个或多个

Scheam

![image.png](https://img.haomeiwen.com/i8043783/f9564cd7e7dd6973.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i8043783/2b9f469da0953453.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i8043783/31427ac6322f1e94.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![image.png](https://img.haomeiwen.com/i8043783/58a7b109d89b0608.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

命名空间的作用:一个XML如果想制定她的约束规则,只能指定一个约束规则DTD, 不鞥指定多个DTD;但是如果一个XML可以引用多个scheam规则,但是这能引用一个DTD规则。作用就是写元素的时候可以制定元素使用哪一套越是规则。

相关文章

网友评论

      本文标题:XML

      本文链接:https://www.haomeiwen.com/subject/soizcqtx.html