XML
XML
-
概念:Extersible markupp Language可扩展标记语言
可扩展:标签都是自定义的。 -
功能:存储数据,1.配置文件使用,2.在网络中传输;
-
XML和HTML的区别
- XML标签都是自定义的,HTML标签是预定义的
- XML语法严格,html语法松散
- XML是存储数据的,HTML是展示数据的
-
语法
- 快速入门1,xml文档的后缀名.xml 2.xml第一行必须定义为文档声明,3.xml文档中有且仅有一个跟标签,4. 属性值必须使用引号(单双都可以)引起来 5。标签必须正确关闭;6. xml标签名称区分大小写;
- 组成部分
- 文档声明:格式
<?xml 属性列表 ?>
属性列表:version版本号(必须属性),encoding编码方式.告知解析引擎当前文档使用的字符集 standalone是否独立值yes不依赖其他文件/no依赖其他文件; - 指令(了解)结合css的:
<? xml-stylesheet type="text/css" href="a.css" ?>
- 标签:标签名称自定义的,规则:
- 名称可以包含字母数字及特殊符号
- 名称不能以数字或标点符号开头
- 名称不能以字母xml或者XML Xml等等开始
- 名称不能包含空格
- 属性:1.id属性值是唯一,
- 文本:在写特殊符号是会提示错误,对此可以采用CDATA区:在该区域中的数据会被原样展示代码:
<![CDATA[ 数据 ]]>
- 文档声明:格式
-
约束:谁编写xml?--用户 谁解析xml?--软件,规定xml文档的书写规则,作为框架的使用者:1.能够在xml种引入约束文档,能够古简单的读懂约束文档
- 分类:
- DTD:一种简单的约束技术(存在缺陷如如不会对内容txt的值进行约束,如age我可以写成10000岁)
<!ELEMENT students (student+)> <!ELEMENT student (name,age,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED>
- Schema:一种复杂的约束技术后缀名是.xsd
详细见:(7条消息) XML Schema语法规则_沐风清寒的博客-CSDN博客_xml数组语法
- 引入DTD文档到XML文档种
- 内部dtd:将约束规则定义在xml文档中
<!DOCTYPE students[约束代码块]>
- 外部dtd:将约束的规则定义在外部的dtd文件中,
- 一种为网络的
<!DOCTYE 跟标签名 PUBLIC "dtd文件的名字" "dtd文件位置的url">
- 一种为本地的
<!DOCTYE 跟标签名 SYSTEM "dtd文件的位置">
- 一种为网络的
- 内部dtd:将约束规则定义在xml文档中
- 分类:
-
解析:操作xml文档,将文件中的数据读取到内存中
- 读取到内存中,写入将内存中的数据保存到xml种。持久化存储;
- 解析xml方式
- DOM:将标记语言一次性加载进内存,在内存种形成一颗DOM树
- 优点:操作比较方便,可以对文档进行CRUD的所有操作;
- 缺点:消耗内存占内存;
- SAX:逐行读取,基于事件驱动的。读一行释放一行,
- 优点:不占内存
- 缺点:只能读取,不能增删改;
- xml常见的解析器:
- JAXP:sun公司提供的解析器,支持dom和sax两种思想
- DOM4J:一款非常优秀的解析器;
- Jsoup:主要解析html的但也可以解析xml
- PULL:android操作系统内置的解析器,sax方式的。
- Jsoup快速入门:1.步骤:导入jar包,2.获取document对象,3.获取对应的标签Element对象,4.获取数据
对象的使用- Jsoup:工具类,可以解析html或xml,返回Document
- parse:返回html文档或xml文档,返回Document
- Parse(File in,String CharesetName):解析xml或html文件的。
- Parse(String html)解析xml或html的字符串的。
- Parse(URL url,int timeoutMillis)通过网络路径获取指定的html或xml的文档对象;
- parse:返回html文档或xml文档,返回Document
- Document:文档对象。代表内存中的dom树
- 获取Element对象
- getElementById(String id):根据id属性值获取唯一的element对象;
- getElementsByTag(String,tagName)根据标签名获取元素对象集合;
- getElementsByAttribute(String key):根据属性名称来获取元素对象;
- getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合;
- 获取Element对象
- Elements元素Element对象的集合。可以当作ArrayList
<Element>
来使用, - Element:元素对象
- 获取子元素对象
- 获取属性值
- 获取文本
- Node:节点对象
- Jsoup:工具类,可以解析html或xml,返回Document
- DOM:将标记语言一次性加载进内存,在内存种形成一颗DOM树
-
快捷查询方式
- serlector:选择器:使用方法Element select(String cssquery)语法:参考Selector类中定义的语法
- XPath:使用jsoup的xpath需要额外导入jar包,语法:查询w3cshool参考手册,使用xpath的语法来完成查询
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><!--standalone="yes" 申明该文件为一个独立文档,无需DTD文档来验证其中的标识是否有效 -->
<document>
<student>
<id>1</id>
<name>张三</name>
<age>18</age>
<address>北京市</address>
</student>
<student>
<id>1</id>
<name>张三</name>
<age>18</age>
<address>北京市</address>
<![CDATA[ 这个人十分优秀]]> <!-- 文档说明 -->
</student>
</document>
XML特点
- xml的可扩展性:
- xml中,可建立任何需要的标记.可充分发挥想象力给文档其一些好标记的名称;
- 标记的自描述性:
- 标记又叫标识,也称元素名,用于描述数据,表示文档中的元素.通过标记,XML文档才便于阅读和理解
- XML语言的规则性:
- 标记区分大小写,必须对且合理嵌套;属性必须用引号""括起来;名字不能以下划线开头,不能有空格,可以有字母,数字及下划线;不能用XML等保留字;
- 文档的结构化
- XML文档结构化,所有的信息按某种关系排列.
- 允许Meta数据(元数据):
- 可用XML描述你的信息在哪里,可用过meta来验证信息,执行搜索,强制显示或者处理其他的数据;
- XML文档的多样显示:
- 可通过CSS或者XSL可扩展样式语言在浏览器中呈现XML内容
- 允许XML,DOM操作:
- XML DOM的作用就是使用脚本语言如何对xml文档的节点和数据进行增删改查等各项操作;
命名空间
在使用过程中遇到存在相同的名字可以使用命名空间来避免名称重复问题
在使用xsl时也需要使用相同的命名空间进行设置;
<f:student xmlns:f="http://www.w3school.com.cn/furniture">
<f:id>African Coffee Table</f:id>
<f:width>80</f:width>
<f:length>120</f:length>
</f:student>
如配置:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://www.w3school.com.cn/furniture">
<xsl:template match="/"><!-- 跟模板是必须的 -->
<html><head><title>aaa</title></head><body>
<xsl:call-template name="myTemplate"/>
</body></html>
</xsl:template>
<xsl:template name="myTemplate" match="breakfast_menu/f:food">
<xsl:for-each select="breakfast_menu/f:food">
<xsl:sort order="descending" select="calories"></xsl:sort>
<p aling="center" style="font-weight:bold;" >
<xsl:value-of select="f:name"></xsl:value-of>
<xsl:value-of select="f:description"></xsl:value-of>
<xsl:value-of select="f:calories"></xsl:value-of>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<?xml-stylesheet href="xsldemo.xsl" type="text/xsl"?>
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>two of our famous Belgian Waffles with plenty of real maple syrup</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>light Belgian waffles covered with strawberries and whipped cream</description>
<calories>900</calories>
</food>
<food>
<name>Berry-Berry Belgian Waffles</name>
<price>$8.95</price>
<description>light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
<calories>900</calories>
</food>
<f:food xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>French Toast</f:name>
<f:price>$4.50</f:price>
<f:description>thick slices made from our homemade sourdough bread</f:description>
<f:calories>600</f:calories>
</f:food>
<food>
<name>Homestyle Breakfast</name>
<price>$6.95</price>
<description>two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
<calories>950</calories>
</food>
</breakfast_menu>
显示效果只有一个French Toastthick slices made from our homemade sourdough bread600
CSS样式
xml文档引入css
<?xml-stylesheet href="cssxml.css" type="text/css"?>
cssxml.css文件内容
name{
font-size: 0.8em;
color: aqua;
font-weight: bold;
}
XSL与CSS的异同
xsl功能强大,复杂度高,提取元素,属性值,注释文本等各种文档内容,遵守xml语法规则;
css 允许格式化不允许改变或安排,不遵从xml语法规则;
XSL样式
备注:需要注意的是chrom启动后不会找本地的xsl文件,需要使用IE11浏览器查看浏览器效果,或者启动一个服务访问进行查看;
xml文档引入xsl
<?xml-stylesheet href="xsldemo.xsl" type="text/xsl"?>
xsldemo.xsl文件内容
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<body style="font-family:Arial,helvetica,sans-serif;font-size:12pt;
background-color:#EEEEEE">
<xsl:for-each select="breakfast_menu/food">
<div style="background-color:teal;color:white;padding:4px">
<span style="font-weight:bold;color:white">
<xsl:value-of select="name"/></span>
- <xsl:value-of select="price"/>
</div>
<div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
<xsl:value-of select="description"/>
<span style="font-style:italic">
(<xsl:value-of select="calories"/> calories per serving)
</span>
</div>
</xsl:for-each>
</body>
</html>
XSL除了这样还可以定义样式模板
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v2007 (http://www.altova.com) -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:template match="/"><!-- 跟模板是必须的 -->
<html><head><title>aaa</title></head><body>
<xsl:call-template name="myTemplate"/>
</body></html>
</xsl:template>
<xsl:template name="myTemplate" match="breakfast_menu/food">
<xsl:for-each select="breakfast_menu/food [calories <=650]">
<xsl:sort order="descending" select="calories"></xsl:sort>
<p aling="center" style="font-weight:bold;" >
<xsl:value-of select="name"></xsl:value-of>
<xsl:value-of select="description"></xsl:value-of>
<xsl:value-of select="calories"></xsl:value-of>
</p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
XSL选择元素
用选择的方式将满足条件的数据从xml文档提取出来
语法 | 说明 |
---|---|
<xsl:value-of select="模式"/> | 从XML文档中提取指定节点的数据输出到结果树中.select属性用来指定XML文档数据节点名称. |
<xsl:for-each select="模式">.....</xsl:for-each> | 循环处理指定节点的相同数据.通过select属性选择XML文档中的某些元素进行循环处理 |
<xsl:if test="测试条件">.....</xsl:if> | 测试test属性给定的条件,当条件的值为true时执行相关内容,否则不执行.姓名="张三" 表示:节点元素"姓名"的值为张三,成绩>=90 表示:节点元素"成绩" 的值大于或等于90 成绩 >=90 or 成绩 <60 表示:节点元素成绩的值大于等于90或小于60 |
<xsl:choose> <xsl:when test="测试内容" ....neiorng</xsl:when><xsl:when test="测试内容" ....neiorng</xsl:when> <xsl:otherwise test="测试内容" ....neiorng</xsl:otherwise></xsl:choose> |
在有多个测试条件的情况下执行满足条件(有test指定测试条件)的内容.当所有条件都不满足时执行xsl:otherwise指定内容 |
<xsl:value-of select="模式"/> | 从XML文档中提取指定节点的数据输出到结果树中.select属性用来指定XML文档数据节点名称. |
<xsl:value-of select="模式"/> | 从XML文档中提取指定节点的数据输出到结果树中.select属性用来指定XML文档数据节点名称. |
<xsl:value-of select="模式"/> | 从XML文档中提取指定节点的数据输出到结果树中.select属性用来指定XML文档数据节点名称. |
<xsl:value-of select="模式"/> | 从XML文档中提取指定节点的数据输出到结果树中.select属性用来指定XML文档数据节点名称. |
<xsl:apply-templates> 元素可把一个模板应用于当前的元素或者当前元素的子节点。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>
XLS常用运算符
运算符 | 含义 | 运算符 | 含义 |
---|---|---|---|
/ | 选择子元素,返回左侧元素的直接子元素;位于最左侧的/表示选择根节点的直接子元素 | // | 引用人以及别的后代元素 |
. | 当前元素 | * | 通配符,选择任意元素,不考虑名字 |
@ | 属性名的前缀 | !* | 在相关节点上应用指定方法 |
@* | 通配符选择任意属性 |
等等具体见
https://blog.csdn.net/xzr2004/article/details/1690260
内置函数
https://www.runoob.com/xsl/xsl-functions.html
XML DOM简介
<script>
var xmlDoc= new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.load("xmlDemo.xml");
var root =xmlDoc.documentElement;
var book=root.childNodes[1];
var description =book.childNodes[2];
var description2 =description.childNodes[0];
document.write(description2.nodeValue);
</script>
DOM
可以对每个xml属性进行操作,可以对DOM修改节点属性,文本你内容
由于DOM分析器把整个XML文档转化成DOM书放在内存中,当XML文档很大或结构复杂是,对内存的需求也很高.
SAX
SAX分析器一顺序方式出发了一系列具有时序性的事件,不能回溯分析过的内容,因此SAX缺乏灵活性但实现简单,对内存要求低,适合作XML文档查询用.
XML DOM对象
在XML DOM接口规范中,有四个基本的XML DOM对象:
Document 对象,Node对象(节点对象) ,NodeList对象(节点列表),NameNodeMap(有名节点映射).
数据库和XML
XML不是数据库,数据库系统有它自己的一套管理模式,而XML仅仅是用来存放数据的文件,一个XML文档相当于数据库中的一个表。因此XML不可能取代数据库,但将数据库和XML结合起来,能够完成很多以前无法完成的工作,例如异构数据交换、应用系统集成等
导出数据库的数据为xml
mysql -X -uroot -p -e "use day17; select * from user;" > d:/c.xml
回车输入数据库密码即可;