欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

XML和正则表达式

程序员文章站 2022-06-29 21:16:24
...

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和正则表达式

<?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和正则表达式

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

常用接口介绍
DOM解析包:org.w3c.dom
XML和正则表达式
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和正则表达式
特殊字符:
XML和正则表达式
预定义字符:
XML和正则表达式
分组:
如何获取字符串“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(?<result>\\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(?<a>\\d{5,10})");//匹配规则
        Matcher m=p.matcher(s);
        if (m.matches()){
            System.out.println(m.group("a"));
        }
    }
}