MySql的学习_XML的学习

概述

XML是可扩展性标记语言
XML数据格式最重要的作用就是数据传输
用途:

  • 程序之间数据的传输通信,在网络中传输数据
  • 配置文件config.xml(最多)
  • 储存数据,当作小型数据库 data.xml
    规范数据格式,使数据具有结构性,易读易处理

XML被发明的目的是传输和存储数据,而不是展示数据
XML的标签必须自定义,但是写标签名时一定要有含义

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <name>张三</name>
</root>

特点:

  • 可扩展的,标签都是自定义的
  • 语法十分严格

XML的基本语法

XML必须有根节点,是其他所有节点的父级节点

<?xml version="1.0" encoding="utf-8" ?>
<users>
    <user id="123" number="1">
        <name>张三</name>
        <age>18</age>
    </user>
    <user id="456">
        <name>李四</name>
        <age>19</age>
    </user>
    <!-- 空元素close-->
    <close/>
</users>
<!--这是XML的注释
    1.XML种必须进行文档声明
        version 版本信息
        encoding 编码
    2.文档声明必须写在第一行
    3.XML中元素标签命名规则
        1.标签定义不能使用空格 或 冒号
        2.xml标签名称区分大小写
    4.XML中有且只有一个根元素
    5.元素体 可以是文本 或者 还是一个标签
    6.属性是元素的一部分,只能出现再元素的开始标签中
        属性值必须使用单引号或双引号包裹
        一个元素标签可以定义多个属性

 -->

XML描述数据形式如下

<?xml version="1.0" encoding="utf-8" ?>
<employees>
    <employee id="1" >
        <name>张三</name>
        <age>18</age>
    </employee>
    <employee id="2">
        <name>李四</name>
        <age>19</age>
    </employee>
    
</employees>

XML约束

编写一个文档来约束一个XML文档的书写规范
常见的XML约束:

  • DTD
  • Schema
    XML由用户程序员编写,可由各种框架(spring、MyBatis等)解析
    我们要引入约束,规范XML中的书写规则

看懂DTD

<!ELEMENT students (student+) >
        <!ELEMENT student (name,age,sex)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)> 
        <!ELEMENT sex (#PCDATA)> 
         <!ATTLIST student number ID #REQUIRED>
  • ELEMENT 定义元素
    students (student+):students 代表根元素
    student+: 根标签中 至少有一个student子元素
    student (name,age,sex) : student标签中可以 包含的子元素 按顺序出现
    #PCDATA:普通的文本内容
    ATTLIST:用来定义属性
    student number ID:有一个ID属性叫做 number,是必须填写的
    #REQUIRED: 表示number属性必须填写
    ID: 表示唯一的值 不能重复 值只能是字母或者下划线开头

引入DTD

XSLT

XSLT是对XML文档进行转化的语言,可把XML变成html或其他任意代码
XSLT本身也是XML格式的文档, XSLT的文档节点是<xsl:stylesheet>

基本语法的学习

XSLT处理器在解释源文档的某个节点的时候,会查找匹配这个节点的规则。这种规则也被称做Template, 在XSLT中是用标签<xsl:template>表示,该标签有个match属性来关联XPATH表达式。

<xsl:template match="/">
   
</xsl:template>

表示从跟节点开始遍历,"/"是XPATH表达式
而下面这个template

<xsl:template match="ACTSET/ACT[ENAME]">
<!-- 输出的内容:文本,属性 等 -->
</xsl:template>

仅作用于源文档中的<ACT>节点集,一个<ACT>节点下面还含有<ENAME>子节点,并且这个<ACT>必须是<ACTSET>节点的直接子节点
match 属性的作用是使模板和XML与元素相匹配。match属性也可以为整个XML文档定义模版。Match属性值是一个XPath表达式。(例如:match="/" 定义整个文档)

小例子

<xsl:template match="ROWSET/ROW[ENAME]">
     <Employee id="NX-{EMPNO}">
           <xsl:value-of select="ENAME"/>
     </Employee>
</xsl:template>

当匹配的模板被实例化后,接下来还会做三件事情:

  1. 模板中的文本和属性直接输出。任何不是以XSL命名空间开头的都被认为是文本,像上面例子里的<Employee>和 id 属性,它们会以文本形式直接输出。
  2. XSLT命名空间下的任何元素,都以文档中的先后顺序被执行。比如执行<xsl:value-of>元素,处理程序会根据select属性中的XPATH表达式获取到值,并以文本节点的形式替换<xsl:value-of>元素。

<xsl:output>元素

<xsl:output>元素定义了输出文档的格式。
<xsl:output method="xml" indent="yes"/>

  • method:定义了输出格式为xml
  • indent:选"yes" 规定输出应根据其层次结构进行缩排。“no” 规定输出不应根据其层次结构进行缩排

<xsl:apply-templates>元素

可把一个模板应用于当前的元素或者当前元素的子节点
<xsl:apply-templates>元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序
语法规则如下:

<xsl:template
name="name" -- name 模板名称
match="pattern" -- match Xpath语句,指定条件
mode="mode" -- mode模式,例如红,蓝等样式
priority="number">  -- priority 指定模板的优先级,为数字
<!-- Content: -->
</xsl:template>

<xsl:apply-templates>元素

<xsl:apply-templates>元素用于告诉处理器处理当前节点的所有子节点
<xsl:apply-templates>元素添加一个 select 属性,此元素就会仅仅处理与属性值匹配的子元素。我们可以使用 select 属性来规定子节点被处理的顺序

<xsl:copy-of>元素

<xsl:copy-of>元素可创建当前节点的一个副本
当前节点的 Namespace 节点、子节点以及属性都会被自动复制

<xsl:value-of>元素

因为<xsl:template match=''>中不能继续有match,match一般是匹配它的根节点,后面用value-of select那些

<xsl:template match='PLAY'>
        <xsl:value-of select="ACT/TITLE"/>
            <ACT>     
            </ACT>
    </xsl:template>   

用于提取某个 XML 元素的值,并把值添加到转换的输出流中
<xsl:value-of>元素可用于选取某个 XML 元素的值,并把它输出

<xsl:for-each>元素

用于选取指定的节点集中的每个 XML 元素

        <xsl:for-each select="ACT">
        <ACT>
            <xsl:value-of select="TITLE"/>    
        </ACT>
        </xsl:for-each> 
    </xsl:template>   

<xsl:sort>元素

如需对输出结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each>元素内部添加一个 <xsl:sort>元素

<xsl:if>元素

用于放置针对 XML 文件内容的条件测试
语法

<xsl:if test="expression">
...如果条件成立则输出...
</xsl:if>

<xsl:choose>元素

<xsl:choose>元素用于结合 <xsl:when><xsl:otherwise>来表达多重条件测试。
语法

<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>

XPath

XPath是XML路径语言,用来确定XML文档中某部分位置。
在这里插入图片描述

XQuery

XQuery是一种针对于XML的查询语言,类似于SQL

<timetable>
<lecture title = "Databases" >
	<lecturer title = "Dr"> 
		<firstName >Ernest </firstName > 
		<lastName >Wilberforce </lastName >
	</lecturer>
	<occurrence day=" Tue " room=" CS1 " start= " 12:00:00 " finish ="14:00:00 "/>
	<occurrence day=" Wed" room =" CS2 " start= " 15:00:00 " finish ="16:00:00 " />
</lecture >
<lecture title= " C++">
<lecturer title= "Professor " > 
	<firstName>Daniela </firstName> 
	<lastName>Strong </lastName>
</lecturer>
<occurrence day= " Tue " room =" CS1"

以上面这个XML文档为例子
文档的名字是"timetable.xml"
doc("timetable.xml")用于打开 “timetable.xml” 文件

路径表达式

另外:
doc("books.xml")/bookstore/book[price>30]/title表示的是
可选取 bookstore 元素下的 book 元素下所有的 title 元素,并且其中的 price 元素的值必须大于 30
XQuery 使用路径表达式在 XML 文档中通过元素进行导航
下面的路径表达式用于在 “timetable.xml” 文件中选取所有的 lecture 元素
doc("timetable.xml")/timetable/lecture
/timetable 选取 timetable 元素,/lecture 选取 timetable 元素下的所有lecture 元素

  • 下面这个 FLWOR 表达式所选取的数据和上面的路径表达式是相同的:
<lectures>
for $v in 
	doc("timetable.xml")/timetable/lecture
return $v
</lectures>

for 语句把 timetable 元素下的所有 lecture 元素提取到名为 $v 的变量中
上面的xml文档完整版:
在这里插入图片描述
则结果是
在这里插入图片描述

where表达式

doc("books.xml")/bookstore/book[price>30]/title
可以转换为

for $x in doc("books.xml")/bookstore/book
where $x/price>30
return $x/title
<lectures>
for $v in 
	doc("timetable.xml")/timetable/lecture
where $v/occurrence/@day="Tue "
return $v
</lectures>

let 语句

let 语句可完成变量分配

let $x := (1 to 5)
return <test>{$x}</test>

结果是
<test>1 2 3 4 5</test>

exercise

在这里插入图片描述

  1. All book titles
<catalog>
{
for $x in doc("books.xml")/catalog/book/title
return $x
}
</catalog>
  1. ids of books that cost more than £20
for $x in doc("books.xml")/catalog/book
where $x/price>20
return <book>{$x/@id}</book>

在这里插入图片描述
3. Titles and publication dates of books published after 2001-01-01, listed in
the order published. Compare dates using >

for $x in doc("books.xml")/catalog/book
where $x/publish_date>"2001-01-01"
order by $x/publish_date
return 
<book>
{$x/title } 
{$x/publish_date}
</book>

在这里插入图片描述
4. A list of genres. distinct-values(…) can remove duplicate nodes in
the for clause

for $x in distinct-values(doc("books.xml")/catalog/book/genre)
return 
<book>
{$x}
</book>

在这里插入图片描述
但如果我们用

for $x in distinct-values(doc("books.xml")/catalog/book/genre)
return $x

只会得到
在这里插入图片描述
5. A list of genres, and within each a list of authors who write in that genre.
Hint: use nested XQuery expressions.

<genre_authtos>
{
for $x in distinct-values(doc("books.xml")/catalog/book/genre)
return 
<genre>
<name>{$x}</name>
{
for $y in distinct-values(doc("books.xml")/catalog/book[genre=$x]/author)
return
<author>
{$y}
</author>
}
</genre>
}
</genre_authtos>

在这里插入图片描述
6. Pairs of books you can buy for £11 or less, with the cost for each pair.

<books>
{
for $x at $xMoney in doc("books.xml")/catalog/book
for $y at $yMoney in doc("books.xml")/catalog/book
let
$sum := $x/price + $y/price
where $sum < 11 and $xMoney < $yMoney
return 
<buy>
<bookOne>{$x/title}</bookOne>
<bookSecond>{$y/title}</bookSecond>
<cost>{$sum}</cost>
</buy>
}
</books>

在这里插入图片描述

XML DOM

DOM 将 XML 文档作为一个树形结构,而树叶被定义为节点
W3C DOM 被分为 3 个不同的部分/级别(parts / levels):

  • 核心 DOM
  • XML DOM
  • HTML DOM

什么是 XML DOM

XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法(接口)
即XML DOM 是用于获取、更改、添加或删除 XML 元素的标准

节点

XML 文档中的每个成分都是一个节点

  • 整个文档是一个文档节点
  • 每个 XML 标签是一个元素节点
  • 包含在 XML 元素中的文本是文本节点
  • 每一个 XML 属性是一个属性节点
  • 注释属于注释节点

Guess you like

Origin blog.csdn.net/Maybe_do_it/article/details/120600586