一、JS创建对象的两种方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*JS去创建对象的原型方式*/
var student=new Object();
student.id=1;
student.name="张三";
student.age=20;
console.log(student)
/*JS通过JSON方式创建Js对象第二种方式*/
var student1={id:1,name:"张三",age:20};
var student2={id:2,name:"李四",age:21};
var student3={id:3,name:"王五",age:22};
var arr=["a","b","c"];
var arr=[{id:1,name:"张三",age:20},{id:2,name:"李四",age:21},{id:3,name:"王五",age:22}];
console.log(arr)
/*JSON本身是JS创建对象的一种方式,本质是JS里面的对象表示法*/
</script>
</head>
<body>
</body>
</html>
运行结果截图
二、XML概述
1.什么是XML
HTML:网页中展示数据,HTML语法松散,
XML(扩展标记语言),一开始出现是为了替换HTML,语法非常严格
XML被设计用来传输和存储数据
在网络中传输数据用两种方式json和xml,但是现在一般的传输数据是用JSON
XML一般用于存储数据,主要用于配置文件
XML的可用标签是固定的,元素数量不是固定的
2.XML的基本语法
1.1 xml文档的后缀名 .xml
1.2 xml第一行必须定义为文档声明
1.3 xml文档中有且仅有一个根标签
1.4 属性值必须使用引号(单双都可)引起来
1.5 标签必须正确关闭
1.6 xml标签名称区分大小写
注意:满足语法规则的xml文档,我们称之为格式良好的xml
3.XML的文档声明
3.1 文档声明:通常出现在XML的第一行第一列的位置!!!
3.2 写法:<?xml 属性名=”属性值” 属性名=”属性值” ...?>
version:必须的.使用”1.0”
encoding:字符集.是使用浏览器打开的时候采用的默认的字符集的编码.
standalone:描述XML文档是否需要依赖其他的文件.
3.3 xml中导入外部样式表:<?xml-stylesheet type="text/css" href="test.css" ?>
4.XML的注释
<!-- XML的注释 -->
5.XML的元素
4.1 名称可以包含字母、数字以及其它的字符
4.2 名称不能以数字或者标点符号开始
4.3 名称不能以字符“xml”(或者XML、Xml) 开始
4.4 名称不能包含空格
6.XML的属性
6.1 属性的名称规范与元素一致.
6.2 必须用引号引起来
7.XML的特殊字符和CDATA区
< | < | 小于
> | > | 大于
& | & | 和号
'| ' | 单引号
"| " | 引号
假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。因此你不能这样写:
<message>if salary < 1000 then</message>
为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样:
<message>if salary <1000 then</message>
XML的CDATA区:(CDATA:Character Data) <![CDATA[ 内容 ]]>
<script>
<![CDATA[function matchwo(a,b){if (a < b && a < 0){return 1}else{return 0}}]]>
</script>
在上面的例子中,在 CDATA 区段中的所有东西都会被解析器忽略。
三、XML的约束
1.为什么会有XML的约束
<!--XML作为配置文件给框架提供载体,XML文档中的标签应该是固定的-->
<!--如何规定在一个XML中只能写某一些东西,不能写另外的一些东西??-->
<!--提供了一种机制-XML约束(会用)-->
2.什么是XML的约束
就是用来约束XML的文档中可以出现哪些标签,不能出现哪些标签,标签中是否有顺序,出现的次数.
XML的约束:用来规范XML的写法.
3.Xml约束有两种分类
扫描二维码关注公众号,回复:
8577982 查看本文章
1. DTD(简单约束)
2. Schema约束(比DTD更加复杂,约束的更加细致)
4.DTD引入的两种方式
DTD的引入方式:
内部的DTD:<!DOCTYPE persons [要写的约束]>
外部的DTD:
一种本地DTD:<!DOCTYPE persons SYSTEM "mybatis.dtd">
一种网络DTD:<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
实例说明
<?xml version="1.0" encoding="UTF-8" ?>
<!--文档内部引入-->
<!DOCTYPE student [
<!ELEMENT student (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<student>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</student>
<?xml version="1.0" encoding="UTF-8" ?>
<!--外部引入本地DTD文档-->
<!DOCTYPE student SYSTEM "student01.dtd">
<!--system:本地的,public:网络上的-->
<student>
<to></to>
<from></from>
<heading></heading>
<body></body>
</student>
<!--外部引入网络DTD文档-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
5.Schema引入的方式
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/bianyiit/spring"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/bianyiit/spring
spring_beans1.xsd">
<bean></bean>
</beans>
实例说明
<!--spring.xml-->
<?xml version="1.0" encoding="UTF-8" ?>
<!--引约束文件-->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:tt="http://www.springframework.org/schema/bianyiit/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/bianyiit/spring spring_beans1.xsd
http://www.springframework.org/schema/beans spring_beans.xsd">
<tt:bean></tt:bean>
</beans>
<!--在根标签beans上去引外部配置文件-->
<!--namespace:名称空间,文档的全限定类名,唯一可以指向文档的名称
在xsd约束中会定义一个全限定类名:targetNamespace="http://www.springframework.org/schema/beans"-->
<!--schemaLocation位置:指定上面的名称空间的位置-->
spring_beans.xsd(注意Schema约束文档的后缀名为xsd)
spring_beans1.xsd
注意:上述图片只是XML约束文档的部分截图
四、XML的解析
2.XML提供了两种解析方式--DOM解析和SAX解析
3.DOM解析方式的原理
3.1 DOM解析方式的原理,先一次性将xml文档加载到内存,形成一颗DOM树
3.2 document对象代表着整个文档,xml只有一个根节点root,根节点下面会有很多子节点
3.3 XMLDOM树的结构如下所示
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
3.4 通过document对象获取整个xml的文档,再通过分别document对象调用方法分别获取各个标签,属性以及文本的内容
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
4.SAX解析方式的原理
1. 没解析到根标签之前,读出第一行<?xml version="1.0" encoding="UTF-8" ?>发出一个解析开始文档的事件,
2. 当读到根标签的时候,发出一个解析开始标签的事件student,
3. 又会向下解析另外一个开始标签的事件student,
4. 然后发出一个解析标签name的事件,
5. 下一次发出一个解析文本name里面的张三的标签,
6. 当解析到</student>的结束标签,
7. 最后到一个结束文档的标签
SAX解析图解如下
5.两种解析方式之间的区别(面试题)
DOM解析的特点:
1.需要一次性将文档加载至内存,形成DOM树,消耗内存空间
2.方便进行文档的增删改...操作
SAX解析的特点:
1.基于事件驱动逐行解析,比较节省内存空间
2.不能进行文档的增删改,只能进行查询的操作
6.针对这两种解析的方式,不同的公司提供了不同的API的实现.
* JAXP :SUN公司提供的一套XML的解析的API.
* JDOM :开源组织提供了一套XML的解析的API-jdom.
* DOM4J :开源组织提供了一套XML的解析的API-dom4j (现在一般使用这种方式解析XML配置文件)
* Jsoup :html解析器,也可以用来解析xml
* pull :主要应用在Android手机端解析XML.
7.解析实例演示
DOM4J的入门案例步骤:
* 【步骤一】导入jar包.dom4j-1.6.1.jar
* 【步骤二】创建解析器
* 【步骤三】解析文档获得代表文档的Document对象.
* 【步骤四】获得跟节点.
* 【步骤五】从跟节点下查找其他的节点.
下载并导入解析XML时需要用的几个jar包
链接:https://pan.baidu.com/s/1u0q5-TAofJh4y439Tu_57w
提取码:hbro
复制这段内容后打开百度网盘手机App,操作更方便哦
<?xml version="1.0" encoding="UTF-8" ?>
<student>
<student id="1">
<name>张三</name>
<age>20</age>
</student>
<student id="2">
<name>李四</name>
<age>18</age>
</student>
</student>
package com.bianyiit.cast;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class Demo4J {
@Test
public void test2() throws DocumentException {
/*1.创建解析器对象*/
SAXReader saxReader=new SAXReader();
InputStream inputstream = Demo4J.class.getClassLoader().getResourceAsStream("xml01.xml");
Document document=saxReader.read(inputstream);
/*3.获取文档的根节点*/
Element rootElement=document.getRootElement();
List<Element> elements = rootElement.elements();
for (Element element : elements) {
String id = element.attribute("id").getValue();
Element nameElement = element.element("name");
String name = nameElement.getTextTrim();
Element ageElement = element.element("age");
String age = ageElement.getTextTrim();
System.out.println("id:"+id+"name:"+name+"age:"+age);
}
}
@Test
public void test1() throws DocumentException {
/*1.创建解析器对象*/
SAXReader saxReader=new SAXReader();
/*2.通过解析器加载文件*/
String path = Demo4J.class.getClassLoader().getResource("xml01.xml").getPath();
Document document=saxReader.read(path);
/*3.获取文档的根节点*/
Element rootElement=document.getRootElement();
/*4.获取元素内容*/
String name=rootElement.getName();
System.out.println(name);
}
@Test
public void test3() throws DocumentException {
/*1.创建解析器对象*/
SAXReader saxReader = new SAXReader();
/*2.通过解析器加载文件*/
String path = Demo4J.class.getClassLoader().getResource("xml01.xml").getPath();
Document document = saxReader.read(path);
/*selectNodes方法是demo4J提供的对xpath的支持方式*/
/*List<Element> list = document.selectNodes("/student/student/name");
for (Element element : list) {
System.out.println(element.getTextTrim());
String name = element.attribute("name").getValue();
System.out.println(name);
}*/
Element node = (Element) document.selectSingleNode("//student[@id='1']");
Element name = node.element("name");
String textTrim = name.getTextTrim();
System.out.println(textTrim);
/*/一定是从文件的开始位置找的 //从文件的任意位置开始找的*/
}
}
三个单元测试代码的结果依次截图如下:
注意:selectNodes方法是demo4J提供的对xpath的支持方式,可以让程序员能够让XML的任意位置开始查找节点元素