JavaWeb--XML(数据处理的必经之路)

JavaWeb–XML(数据处理的必经之路)

一篇文章读懂整个XML
本文系统全面的介绍了XML,在本文实现对整个XML的认识、理解并运用。将引领大家更好的对XML的学习

在这里插入图片描述

XML的作用

XML是什么

可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
XML(Extensible Markup Language)扩展性标识语言。文件的后缀名为:.xml。就像HTML的作用是显示数据,XML的作用是传输和存储数据。
在这里插入图片描述

XML与HTML的比较

在这里插入图片描述

在这里插入图片描述

XML的用途

为了便于不同应用、不同平台之间的数据共享和通信。

  • 可作为一种简单的数据库,存储并检索数据;

  • 传输约定格式的文件;

  • 做软件的配置文件。【配置文件:保存软件设置的文件】
    在这里插入图片描述

在这里插入图片描述

XML书写语法规则

  • XML文档结构
    在这里插入图片描述
  • XML声明
    在这里插入图片描述

XML标签书写规则

在这里插入图片描述

  • 合法的标签名
    在这里插入图片描述

  • 适当的注释与缩进
    在这里插入图片描述

  • 合理使用属性
    在这里插入图片描述

  • 处理特殊字符
    在这里插入图片描述

  • xml文件练习

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hr SYSTEM "hr.dtd">
<hr>
    <employee no="3309">
        <name>张三</name>
        <age>18</age>
        <salary>3000</salary>
        <department>
            <dname>会计部</dname>
            <address>重庆xx大厦-A1</address>
        </department>
    </employee>
    <employee no="3310">
        <name>李四</name>
        <age>22</age>
        <salary>4000</salary>
        <department>
            <dname>工程部</dname>
            <address>重庆xx大厦-B4</address>
        </department>
    </employee>
</hr>

将文件拖入浏览器(笔者使用浏览器为谷歌)中即可展示文件。
在这里插入图片描述

CDATA标签

在这里插入图片描述

  • 有序的子元素
    在这里插入图片描述

Java解析XML

在这里插入图片描述

Dom4j

下载地址:https://dom4j.github.io/
注意事项:Dom4j的版本对jdk的版本有限制要求,在下载的时候需要注意版本的控制。
在这里插入图片描述

运用实现对xml文件的读取

package JavaWeb.xml.dom4j;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class HrReader {
    public void readXml(){
        String file = "F:/xxx/src/JavaWeb/xml/hr.xml";
        //SAXReader类是读取XML文件的核心类,用于将XML解析后以“树”的形式保存在内存中
        SAXReader reader = new SAXReader();
        try {
            Document document=reader.read(file);
            //获取XML文档的根节点,即hr标签
            Element root = document.getRootElement();
            //elements方法用于获取指定的标签合集
            List<Element> employees =root.elements("employee");
            for (Element employee : employees){
                //element方法用于获取唯一的子节点对象
                Element name = employee.element("name");
                String empName = name.getText();//getText()方法用于获取标签文本
                System.out.println(empName);
                System.out.println(employee.elementText("age"));
                System.out.println(employee.elementText("salary"));
                Element department = employee.element("department");
                System.out.println(department.element("dname").getText());
                System.out.println(department.element("address").getText());
                Attribute att = employee.attribute("no");
                System.out.println(att.getText());
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        HrReader reader = new HrReader();
        reader.readXml();
    }
}

在这里插入图片描述

运用实现对xml文件的写入

package JavaWeb.xml.dom4j;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.SAXWriter;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class HrWriter {
    public void writerXml(){
        String file = "F:/xxx/src/JavaWeb/xml/hr.xml";
        SAXReader reader = new SAXReader();
        try {
            Document document = reader.read(file);
            Element root = document.getRootElement();
            Element employee=root.addElement("employee");
            employee.addAttribute("no","3311");
            Element name =employee.addElement("name");
            name.setText("李铁柱");
            employee.addElement("age").setText("19");
            employee.addElement("salary").setText("3600");
            Element department = employee.addElement("department");
            department.addElement("dname").setText("人事部");
            department.addElement("address").setText("重庆xx大厦-c4");
            Writer writer = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
            document.write(writer);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        HrWriter hrWriter = new HrWriter();
        hrWriter.writerXml();
    }
}

在这里插入图片描述
写入之后,返回查看xml文件(此处为hr,xml)文件会增加HrWriter编写的内容

XML的语句约束

XML语句约束

在这里插入图片描述

DTD

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • DTD文件练习
<?xml version="1.0" encoding="UTF-8" ?> 
<!ELEMENT hr (employee+)>
<!ELEMENT employee (name,age,salary,department)>
<!ATTLIST employee no CDATA "">
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT department (dname,address)>
<!ELEMENT dname (#PCDATA)>
<!ELEMENT address (#PCDATA)>

XML Schema

XSD是DTD替代者的原因

  • 据将来的条件可扩展
  • 比DTD丰富和有用
  • 用XML书写
  • 支持数据类型
  • 支持命名空间。
    XML Schema的优点:
  1. XML Schema基于XML,没有专门的语法
  2. XML Schema可以象其他XML文件一样解析和处理
  3. XML Schema比DTD提供了更丰富的数据类型.
  4. XML Schema提供可扩充的数据模型。
  5. XML Schema支持综合命名空间
  6. XML Schema支持属性组。
    在这里插入图片描述
  • xml schema练习
<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
    <element name="hr">
        <complexType>
            <sequence>
                <element name="employee" minOccurs="1" maxOccurs="unbounded">
                    <complexType>
                        <sequence>
                            <element name="name" type="string"></element>
                            <element name="age">
                                <simpleType>
                                    <restriction base="integer">
                                        <minInclusive value="18"></minInclusive>
                                        <maxInclusive value="60"></maxInclusive>
                                    </restriction>
                                </simpleType>
                            </element>
                            <element name="salary" type="integer"></element>
                            <element name="department">
                                <complexType>
                                    <sequence>
                                        <element name="dname" type="string"></element>
                                        <element name="address" type="string"></element>
                                    </sequence>
                                </complexType>
                            </element>
                        </sequence>
                        <attribute name="no" type="string" use="required"></attribute>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

Xpath的路径表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Jaxen

下载地址:http://www.java2s.com/Code/Jar/j/Downloadjaxen112jar.htm

在这里插入图片描述

package JavaWeb.xml.Xpath;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.util.List;

public class XpathTest {
    public void xpath(String xpathExp){
        String file = "F:/xxx/src/JavaWeb/xml/hr.xml"; //查询文件的位置
        SAXReader reader = new SAXReader(); //SAXReader类是读取XML文件的核心类,用于将XML解析后以“树”的形式保存在内存中。
        try {
            Document document = reader.read(file);
            List<Node> nodes = document.selectNodes(xpathExp);
            for(Node node : nodes){
                Element emp =(Element)node;
                System.out.println(emp.attributeValue("no"));
                System.out.println(emp.elementText("name"));
                System.out.println(emp.elementText("age"));
                System.out.println(emp.elementText("salary"));
                System.out.println("=========================");
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        XpathTest test = new XpathTest();
//        test.xpath("/hr/employee"); //查询hr节点下的employee
//        test.xpath("//employee");     //查询任意节点的employee
//          test.xpath("//employee[salary<3600]");//查询满足条件salary小于3600的employee
//        test.xpath("//employee[name='李铁柱']"); //查询满足条件name为李铁柱的employee
//            test.xpath("//employee[@no=3309]");//查询满足条件no为3309的employee
//        test.xpath("//employee[1]");//查询第一位employee
//        test.xpath("//employee[last()]");//查询最后一位employee
//        test.xpath("//employee[position()<3]");//查询前三位emp
        test.xpath("//employee[3] | //employee[2]");//查询第三位和第二位employee
    }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值