XML和正则表达式

XML和正则表达式

XML&JSON

XML

XML(EXtensible Markup Language),可扩展标记语言

特点:
1、XML与操作系统、编程语言的开发平台无关
2、实现不同系统之间的数据交换

作用:
数据交互
配置应用程序和网站
Ajax基石

XML结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!--图书信息 -->
    <book id="bk101">
        <author>王珊</author>
        <title>.NET高级编程</title>
        <description>包含C#框架和网络编程等</description>
    </book>
    <book id="bk102">
        <author>李明明</author>
        <title>XML基础编程</title>
        <description>包含XML基础概念和基本作用</description>
    </book>
</books>

XML下标:XML文档内容由一系列标签元素组成

<元素名 属性名=“属性值”>元素内容</元素名>

注:
1、属性值用双引号包裹
2、一个元素可以有多个属性
3、属性值中不能直接包含<、“、&
4、不建议使用的字符:‘、>

XML编写注意事项:
所有XML元素都必须有结束标签
XML标签对大小写敏感
XML必须正确的嵌套
同级标签以缩进对齐
元素名称可以包含字母、数字或其他的字符
元素名称不能以数字或者标点符号开始
元素名称中不能含空格

练习:编写XML文档
将如下衣服的尺码信息,使用XML文件保存
XML和正则表达式_第1张图片

<?xml version="1.0" encoding="UTF-8" ?>
<Sizes>
    <size id="s">
        <min>0</min>
        <max>165</max>
    </size>
    <size id="M">
        <min>165</min>
        <max>170</max>
    </size>
    <size id="L">
        <min>170</min>
        <max>175</max>
    </size>
    <size id="XL">
        <min>175</min>
        <max>180</max>
    </size>
    <size id="XXL">
        <min>180</min>
        <max>185</max>
    </size>
</Sizes>

属性命名空间
示例:

<?xml version="1.0" encoding="UTF-8"?>
<batchCompany xmlns="http://www.Aptech_edu.ac"
    xmlns:tea="http://www.tea.org">
    <batch-list>
        <batch type="thirdbatch">第三批次</batch>
        <batch tea:type="thirdbatch">第三批茶</batch>
        <batch>午班批次</batch>
    </batch-list>
</batchCompany>

作用:
解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素

XML解析器
解析器类型:
1、非验证解析器
检查文档格式是否良好
2、验证解析器
使用DTD检查文档的有效性

解析XML技术
DOM
基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源

SAX
基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小

DOM4J
非常优秀的Java XML API
性能优异、功能强大
开放源代码

DOM介绍
文档对象模型(Document Object Model)
DOM把XML文档映射成一个倒挂的树
XML和正则表达式_第2张图片

<book >
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>30</price>
</book>

常用接口介绍
DOM解析包:org.w3c.dom
XML和正则表达式_第3张图片
DOM解析XML文件步骤
1.创建解析器工厂对象
2.解析器工厂对象创建解析器对象
3.解析器对象指定XML文件创建Document对象
4.以Document对象为起点操作DOM树

练习:显示手机品牌型号
需求说明
显示“phone.xml”文件中收藏的手机品牌和型号

<?xml version="1.0" encoding="utf-8" ?>
<phoneInfo>
    <brand name="华为">
        <type name="p30"/>
        <type name="mate30"/>
        <type name="p40pro"/>
    </brand>
    <brand name="苹果">
        <type name="iphone11p"/>
        <type name="iphoneX"/>
    </brand>
</phoneInfo>
public static void main(String[] args) throws Exception {
        TestXML xml=new TestXML();
        xml.setDocument("src/cn/kgc/Demo/phone_info.xml");
        Document document;
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        document = builder.parse("src/cn/kgc/Demo/phone_info.xml");
        NodeList brands = document.getElementsByTagName("brand");
        Node item = brands.item(0);
        Element e = (Element) item;
        System.out.println(e.getAttribute("name"));
        for (int i = 0; i < hwTypes.getLength(); i++) {
            Node n = hwTypes.item(i);
            if (n instanceof Element) {
                Element type = (Element) n;
                System.out.println(type.getAttribute("name"));
            }
        }
}        

保存XML文件:
步骤
1、获得TransformerFactory对象
2、创建Transformer对象
3、创建DOMSource对象
包含XML信息
4、设置输出属性
编码格式
5、创建StreamResult对象
包含保存文件的信息
6、将XML保存到指定文件中

练习:添加手机收藏
添加新的Brand:三星
给Brand节点添加新的子标签Type:Note20
将Brand添加到DOM树中

 NodeList hwTypes = e.getChildNodes();
        Node root=xml.document.getElementsByTagName("phoneInfo").item(0);
        Element sx=xml.document.createElement("brand");
        sx.setAttribute("name","三星");
        Element sxType=xml.document.createElement("type");
        sxType.setAttribute("name","note20");
        sx.appendChild(sxType);
        root.appendChild(sx);

JSON

JSON(JavaScript Object Notation)是JavaScript中的对象表示法
轻量级的文本数据交换格式,独立于JavaScript语言
特点:
具有自我描述性
比XML传输速度快

语法规则:
数据由名称/值对构成
数据之间由逗号分隔
大括号内为对象
中括号内为数组

{
	"name":"jason",
	"age":20,
	"skills":["Java","Hadoop","Python"]
}

示例:

public class TestJson {
    public static void main(String[] args) {
        Student s=new Student(1,"川普","男",55.5);
        System.out.println(s);
        String jsonString = JSON.toJSONString(s);//传输过程中可阅读
        Object o=JSON.toJSON(s);
        System.out.println(jsonString);
        JSONObject jsonObject=JSON.parseObject(jsonString);
        Student t=JSON.toJavaObject(jsonObject,Student.class);
        System.out.println(t);
    }
}

Java对象转为JSON字符串

Student stu=new Student("Jason",20, 
                                                 Arrays.asList("Java", "Hadoop", "Python"));
String stuJson=com.alibaba.fastjson.JSON.toJSON(stu).toString();
System.out.println(stuJson);

JSON字符串转为Java对象

String json="{
                          \"skills\":[\"Java\",\"Hadoop\",\"Python\"],
                          \"name\":\"Jason\",
                          \"age\":20
                        }";
Student stuNew= com.alibaba.fastjson.JSON.parseObject(json,Student.class);
System.out.println(stuNew.getName());

正则表达式

正则表达式描述了一种字符串匹配的模式,也称规则表达式,常用于检索、替换符合指定模式(规则)的文本

语法:
正则表达式是由普通字符与特殊字符组成的字符串
普通字符:原义字符、非打印字符
特殊字符:元字符:* + ? $ ^ . | \ ( ) { } [ ]

非打印字符:
XML和正则表达式_第4张图片
特殊字符:
XML和正则表达式_第5张图片
预定义字符:
XML和正则表达式_第6张图片
分组:
如何获取字符串“hello”中的字符“e”?
使用“()”分组

Pattern p=Pattern.compile("h(\\w*)llo");
Matcher matcher=p.matcher("hello");
if(matcher.matches())
	System.out.println(matcher.group(1));//输出匹配结果

命名分组:
如何获取字符串“hello”中的字符“e”?

Pattern p=Pattern.compile("h(?\\w*)llo");
Matcher matcher=p.matcher("hello");
if(matcher.matches())
	System.out.println(matcher.group("result"));//输出匹配结果

练习:使用正则表达式识别手机号码
需求说明
识别150打头的手机号码

public class TestRegex {
    public static void main(String[] args) {
        String s="15062285560";//匹配150开头的手机号
        Pattern p=Pattern.compile("^150(?\\d{5,10})");//匹配规则
        Matcher m=p.matcher(s);
        if (m.matches()){
            System.out.println(m.group("a"));
        }
    }
}

你可能感兴趣的:(XML和正则表达式)