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 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文档映射成一个倒挂的树
<book >
<title>三国演义</title>
<author>罗贯中</author>
<price>30元</price>
</book>
常用接口介绍
DOM解析包:org.w3c.dom
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());
正则表达式
正则表达式描述了一种字符串匹配的模式,也称规则表达式,常用于检索、替换符合指定模式(规则)的文本
语法:
正则表达式是由普通字符与特殊字符组成的字符串
普通字符:原义字符、非打印字符
特殊字符:元字符:* + ? $ ^ . | \ ( ) { } [ ]
非打印字符:
特殊字符:
预定义字符:
分组:
如何获取字符串“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"));
}
}
}
推荐阅读
-
Java 创建动态类和查看方法列表信息的实例
-
详解Spring Boot 属性配置和使用
-
ASP.NET中DropDownList和ListBox实现两级联动功能
-
MySQL数据库服务器端核心参数详解和推荐配置
-
Android编程实现网络图片查看器和网页源码查看器实例
-
Java8新特性之深入解析日期和时间_动力节点Java学院整理
-
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
-
教你用Python脚本快速为iOS10生成图标和截屏
-
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
-
基于C#中XmlReader读取Xml的深入分析