栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

26.XML

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

26.XML

XML

        可扩展标记语言

        它是一种标记语言 很类似HTML,HTML文件也是XML文档

XML 与 HTML 区别差异

        1.xml标签都是自定义,html标签是预定义

        2.xml语法严格,html语法松散

        3.xml是存储数据的,html是展示数据

存储数据格式:



    
          大珍珠
    
    
        小珍珠
    

配置文件格式:



    
        
    

xml注意点事项:

        标签由一对尖括号+合法标识符组成        

        标签必须成对出现        

        特殊的标签可以不成对称自闭和标签,但是必须有结束标记        

        标签中可以定义属性,属性和标签名空格隔开属性值必须用引号引起来

        

        标签嵌套

        

                大珍珠

        

xml规则:

        xml文件后缀名:xml

        文档声明必须是第一行第一列(定格)

                version:版本

                encoding:字符编码

        必须存在根标签,有且只能有一个

注释:

        ctrl+shift+/

特殊字符:

方式一 转译:

        <        <    小于
        >        >    大于
        &    &    和号
        '    '    单引号
        "    "    引号

方式二 DATA区:

         IDEA:CD生成

XML约束

        XML约束主要分2类 DTD 和 Schema 两种约束技术,用来限定xml文件可使用的标签以及属性,也就是告诉程序员xml如何编写

DTD约束

        引入DTD约束

1.引入本地dtd
        
2.在xml文件内部引入
        
3.引入网络dtd
        


        
        
        

复杂元素:
直接写子元素名称。
       多个子元素可以使用","或者"|"隔开;
       ","表示定义子元素的顺序 ; 
       "|": 表示子元素只能出现任意一个

简单元素:
EMPTY:	表示标签体为空 
ANY:	表示标签体可以为空也可以不为空 
PCDATA:	表示该元素的内容部分为字符串

        

属性的类型:
CDATA类型:普通的字符串 

        

        

属性的约束:
#REQUIRED:   必须的 
#IMPLIED:    属性不是必需的 
#FIXED value:属性值是固定的

        

        

Schema约束

        引入Schema约束

解析原理图


Schema和dtd的区别

        1. schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
        2.一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
        3.dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
        4.schema语法更加的复杂

XML解析 
dom4j解析
public class Demo01ParseXml {
    public static void main(String[] args) throws Exception {
        //1.创建dom4j核心类SaxReader类的对象
        SAXReader saxReader = new SAXReader();

        //使用类加载器获取xml文件对应的字节输入流对象
        InputStream is = Demo01ParseXml.class.getClassLoader().getResourceAsStream("beans.xml");

        //2.dom4j核心类SaxReader类的对象调用read方法,加载xml文件获取对应的Document对象
        Document document = saxReader.read(is);

        //3.获取根标签beansElement
        Element beansElement = document.getRootElement();

        //4.获取根标签beansElement中的所有bean子标签,存储List集合对象beanElements
        List beanElements = beansElement.elements();

        //5.增强for遍历List集合对象beanElements
        for (Element beanElement : beanElements) {

            //5.1 循环内部获取当前bean标签的id和className的属性值
            String id = beanElement.attributeValue("id");
            String className = beanElement.attributeValue("className");

            //5.2 循环内部输出5.1中获取的属性值
            System.out.println(id + "::::" + className);

            //5.3 获取当前bean标签的所有property子标签,存储List集合对象propertyElements
            List propertyElements = beanElement.elements();

            //5.4 增强for遍历List集合对象propertyElements
            for (Element propertyElement : propertyElements) {

                //5.4.1 循环内部获取当前property标签的name和value的属性值,以及文本内容
                String name = propertyElement.attributeValue("name");
                String value = propertyElement.attributeValue("value");
                String text = propertyElement.getText();

                //5.4.2 循环内部输出5.4.1中获取的属性值及文本内容
                System.out.println("tt" + name + "-----" + value + "-----" + text);
            }
        }

        is.close();
    }
}
 使用dom4j支持xpath解析
public class Demo02XPathXml {
    public static void main(String[] args) throws Exception {
        //创建dom4j核心类的对象
        SAXReader saxReader = new SAXReader();

        //使用类加载器获取xml文件的对应的字节输入流对象
        InputStream is = Demo02XPathXml.class.getClassLoader().getResourceAsStream("students.xml");

        //加载xml文件获取对应的Document对象
        Document document = saxReader.read(is);

        //1.查询所有student标签
        List nodeList = document.selectNodes("//student");
        //遍历
        for (Node node : nodeList) {
            System.out.println(node);
        }

        System.out.println("--------------");

        //2.查询所有student标签下的name标签
        nodeList = document.selectNodes("//student//name");
        //遍历
        for (Node node : nodeList) {
            System.out.println(node);
        }

        System.out.println("--------------");

        //3.查询student标签下带有id属性的name标签
        Node node = document.selectSingleNode("//student//name[@id]");
        System.out.println(node);

        System.out.println("--------------");

        //4.查询student标签下带有id属性的name标签 并且id属性值为itcast
        node = document.selectSingleNode("//student//name[@id='itcast']");
        System.out.println(node);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991729.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号