XML使用方式 XML数据流向 XML定义 XML语法规则 详解(最全)

XML语法-笔记

/*在学习Java的过程中,一直有一个东西让我捉摸不透,这就是XML文件
XML文件是如何调用的?
语法规则是什么?
怎么使用XML?
数据流的产生等.........
然后,一气之下,花一天时间,搞定这个XML文件吧。
*/

实体类

JavaBean有特定的写法

  • 必须要有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

一般用来和数据库字段做映射ORM:

  • 表 --> 类
  • 字段 --> 属性
  • 行记录 --> 对象
id name age address
1 薛之谦1 22 江苏
2 薛之谦2 21 北京
//表格对应的实体类
class People(){
    private int id;
    private String name;
    private int age;
    private String address;
}

class A{
    People p1 = new People(3,“薛之谦3”,33,“杭州”);
}









id:
姓名:
年龄:
地址:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2936GOdz-1602751358195)(C:\Users\18130\AppData\Roaming\Typora\typora-user-images\image-20201015091311722.png)] – 作用范围

ml = mark language

单片机游戏的作用

1、存储数据:比如手机中的游戏装备、等级等
2、传文件:大型的应用网络使用xml,网络上传递数据
3、配置文件:* properties,* .xml

XML 的特点:

1、平台无关性

2、90%的语言都支持XML4

3、xml文件的标签具有自我描述性

  • 在html中所有的标签全都是官方定义好的
  • xml中标签可以自己写

XML 语法规则

1、必须得有根元素

2、标签必须得闭合

3、对大小写敏感

4、必须得正确嵌套

5、属性必须加引号

<ban>
	<xuesheng>
    	<id>1id>
        <name>张三name>    
    xuesheng>
    
    <xuesheng>
    	<id>2id>
        <name>李四name>
    xuesheng>
    
ban>

自己制作一个xml文档

<family>
	
    	<name>孙悟空name>
        <age>500age>
        <jon>保镖jon>
    member>

    
    	<name>猪八戒name>
        <age>500age>
        <jon>保镖jon>
    member>

family>

XML的转义

在xml中书写特殊符号包错,则使用

<xx>   <xx>

Mybatis 中的 固定 标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vvxk3LX-1602751358197)(C:\Users\18130\AppData\Roaming\Typora\typora-user-images\image-20201015141359446.png)]

  • 这个 dtd (Document Type Definition)文件用来固定数据类型,也可以自己写一个 dtd 文件 :

    (所以如果你看不懂Mybatis中的XML文档的话,只需要百度一下mybatis-3-mapper.dtd)





  • 在 xml 中 进行文档声明:
< ?xml version ="1.0" encoding="UTF-8">
    
< !DOCTYPE students SYSTEM 'fileName.dtd'>
    <Students>
    	<student>
            <name>张三name>
            <age>20age>
        student>
    Students>

– 已经定义的标签以及子标签,好比 student 中有子标签 name 和 age 但是在 xml 文件中不写 name 和 age 的话会报错。

XSD文件

  • xsd文件是dtd文件的替代品,比dtd高端
  • 是xml的结构定义文件,(XML Schemas Definition)
//由于内容与dtd文件一样不需要掌握,且代码较为复杂,所以这里不放代码,有需要的话可以百度xsd文件规范

解析 XML 文件

解析 XML 文件的四种方式:

方式 性能 原理 优点 缺点
1、DOM解析 3 把文档中的所有元素按照出现层次列成树状结构 可以遍历 & 修改节点内容。 内存压力大,解析慢。
2、SAX解析 第2 是xml的解析替代方法 相对dom更快 更 有效 不能修改节点内容
3、JDOM解析 3 仅适用具体的类,不用接口 不灵活
4、DOM4J解析 最好 JDOM的一种只能分值,合并了许多超出基本XML文档的功能 著名的框架hibernate

//前两种属于基础方法,是官方提供的与平台无关的解析方式;

//后两种属于扩展方法,他们是在基础方式上扩展出来的,只适用于java平台。

DOM4J解析方式:

读取 XML 文件

    public static void main(String[] args) throws Element{
        // 1 --加载xml文件到jvm中,形成数据流
        InputStream fileStream =TestXml.class.getResourceAsStream("test4.xml");

        // 2 --创建解析对象
        SAXReader sax = new SAXReader();

        // 3 --获得整个Xml文档对象
        Document doc = sax.read(fileStream);

        // 4 -- 一层一层的读取元素
        //4.1 -- 获得根元素
        Element root = doc.getRootElements();

        // 4.2 -- 获得根元素下的所有子元素
        List list = root.elements();

        for(Element e1 : list){
            List<Element> list2 = e1.getName();
            for(Element e2 : list2){
                System.out.println(e2.getName() + ":" + e2.getData());
            }
        }

        //获取数据类型
        for (Element e1 : list) {
            Attribute type = e1.attribute("type");
        }
    }

写入 XML 文件

public static void main(String[] args) throws Element{
    // 1 --加载xml文件到jvm中,形成数据流
    InputStream fileStream =TestXml.class.getResourceAsStream("test4.xml");

    // 2 --创建解析对象
    SAXReader sax = new SAXReader();

    // 3 --获得整个Xml文档对象
    Document doc = sax.read(fileStream);

    // 4 -- 一层一层的读取元素
    //4.1 -- 获得根元素
    Element root = doc.getRootElements();

    Element student = root.addElement("student");
    Element id = student.addElement("id");
    id.setText("3");
    Element id = student.addElement("name");
    id.setText("薛之谦");
    Element id = student.addElement("age");
    id.setText("30");

    //写入XML文件中
    FileOutputStream out = new FileOutputStream("");
    OutputFormat format = new OutputFormat("\t",true,"UTF-8");
    XMLWriter xw = new WMLWriter(out,format);
    //将整个文档写入到文件中
    xw.write(doc);
    System.out.println("写入成功");
    xw.close();
}

XPath:

  • 一般的便利方式:

    • for 多层嵌套访问
  • 使用xpath需要引包:jaxen-1.1-beta-7.jar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K2Fg7m8L-1602751358199)(C:\Users\18130\AppData\Roaming\Typora\typora-user-images\image-20201015163321373.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pLITH0hz-1602751358201)(C:\Users\18130\AppData\Roaming\Typora\typora-user-images\image-20201015163718356.png)]

最简单的读取方式

创建 xml文件,其中有三个Student,每个学生的属性是:name,age

 /*   // 1 --加载xml文件到jvm中,形成数据流
    InputStream fileStream =TestXml.class.getResourceAsStream("test4.xml");

    // 2 --创建解析对象
    SAXReader sax = new SAXReader();

    // 3 --获得整个Xml文档对象
    Document doc = sax.read(fileStream);

    // 4 -- 一层一层的读取元素
    //4.1 -- 获得根元素
    Element root = doc.getRootElements();*/

//获得所有的学生	
List<Element>  list = root.selectNodes("student");
//获取所有的学生的名字
List<Element>  name = root.selectNodes("student/name");
//获得第一个学生
List<Element>  name = root.selectNodes("student[1]");
//获取所有带有type属性的学生
List<Element>  name = root.selectNodes("student[@type]/name");
//获取带有type = c 的学生 
List<Element>  name = root.selectNodes("student[@type='c']/name");
//获得年龄超过20岁的学生
List<Element>  name = root.selectNodes("student[age>20]/name");
//获取倒数第二个学生的名字

//全部打印
list.forEach( S -> System.out.println());
list.forEach(System.out::println());

你可能感兴趣的:(Java,xml,java)