XML

XML

XML 指可扩展标记语言(eXtensible Markup Language)

XML 是一种标记语言,很类似 HTML,HTML 文件也是 XML 文档

XML 标签没有被预定义,你需要按要求自行定义标签

XML 的设计宗旨是传输数据,而非显示数据

XML 被设计为具有自我描述性,就是易于阅读

XML 是 W3C 的推荐标准

标记语言: 该门语言是由标签构成的。

可拓展: 该门语言的标签完全可以由你自己自定义的,不固定。

Xml文件的作用:

1.描述数据之间的关系。

2.系统与系统之间的数据传输。

XML 与 HTML 的主要差异

XML 不是 HTML 的替代
XML 和 HTML 为不同的目的而设计
XML 被设计为传输和配置数据,其焦点是数据的内容
HTML 被设计用来显示数据,其焦点是数据的外观
HTML 旨在显示信息,而 XML 旨在传输和配置数据

XML 的应用场景

1. XML 可以作用一个小型简单数据库。


2. XML 可以作为数据交换的载体,也就是说使用 XML 格式进行数据的传输。
   XML 数据是以纯文本格式的文件数据(以.xml 扩展名的文件),
   因此提供了一种独立于软件和硬件的数据,可用于不同软件或系统之间传输数据。
   
   
3. XML 可以作为配置文件,例如 Spring 框架的配置都是通过 XML 进行配置的。
   例如:spring 框架的 ApplicationContext.xml 配置文件。

XML 文件的语法

XML 文件中的数据一共由 7 个组成元素构成,
分别为文档声明、 元素、 属性、注释、转义字符、字符区、处理指令

文档声明

1. 文档声明必须为<?xml 开头,以?>结束。
<?xml version="1.0" encoding="UTF-8"?>


2. 文档声明必须从文档的 0 行 0 列位置开始。

3. 文档声明只有三个属性:
   version:指定 XML 文档版本。这里一般选择 1.0,必须属性。

   enconding:指定当前文档的编码,默认值是 utf-8,可选属性。
   Encoding所写编码要与写入xml文件的编码要一致,否则会出现乱码问题。

   standalone:指定文档独立性。可选属性,默认值为 yes,表示当前文档时独立文档。
                            如果为 no 表示当前文档不是独立的文档,会依赖外约束文件。

标签元素

1. 元素是 XML 文档中最重要的组成部分。

2. 普通元素的结构由开始标签、元素体、结束标签组成。
   例如:<name>张三</name>
   
3. 元素体:元素体可以是元素,也可以是文本。
   例如: <person><name>张三</name></person>
   
4. 空元素:空元素只有标签,而没有结束标签,但元素必须自己闭合。
   例如:<sex></sex><sex/>


//标签名要注意的命名规则:
    区分大小写,
    标签名不能以数字开头,
    不能使用空格,
    不能使用冒号,
    不建议以 XML、xml、Xml 开头。
    //必须只有一个根元素。
    根节点就是xml文件的第一个标签

属性

例 : <book id="1111" ></book>
    
1. 属性是元素的一部分,它必须出现在元素的开始标签中。

2. 属性的定义格式:属性名="属性值",其中属性值必须使用单引或双引号括起来。

 
3. 一个元素可以有 0~N 个属性,但一个元素中不能出现同名属性。

4. 属性名不能使用空格、冒号等特殊字符,且必须以字母开头。

唯一的标识一般作为属性

注释

XML 的注释与 HTML 相同
格式: 
 <!-- 注释内容.. -->
ctrl+/ 添加注释

转义字符

<message>if salary &lt; 1000 then</message>

XML 中的转义字符与 HTML 一样。
因为很多符号已经被文档结构所使用,所以在元素体或属性值中想使用这些符号

就必须使用转义字符(也叫实体字符),例如:">"、"<"、"'"、"""、"&。

特殊符号                实体字符
  <                        &lt;
  >                        &gt;

字符区

<![CDATA[
if (a < b && a < 0) then
]]>

1. CDATA 指的是不应由 XML 解析器进行解析的文本数据。

2. 字符区格式:
<![CDATA[文本数据]]> 
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束。

3. 当大量的转义字符出现在 XML 文档中时,会使 XML 文档的可读性大幅度降低。
   这时如果使用 CDATA 段就会好一些。
   注意:
   CDATA 段不能包含字符串 "]]>"。也不允许嵌套的 CDATA 段。
   标记 CDATA 段结尾的 "]]>" 不能包含空格或折行。

//字符区里面的内容就是一串普通的文本,
//xml的解释器对于字符区的内容全部都会当成普通的文本处理,
//即使出现了特殊的符号也是普通的文本而已。 

处理指令

<?xml-stylesheet type="text/css" href="a.css"?>

在 XML 文档中可以使用 xml-stylesheet 指令,通知 XML 解析引擎,
引入 CSS 文件显示 XML文档内容。

1. 处理指令必须以“<?”作为开头,以“?>”作为结尾,
XML 声明语句就是最常见的一种处理指令。

2. 处理指令,简称 PI (processing instruction),
处理指令用来指挥解析引擎如何解析 XML文档内容。

3. xml-stylesheet 指令应用样式需要使用浏览器浏览才可以看到效果。


步骤:
1. 创建一个 book.xml 文件
2. 创建一个 book.css 
3. 让 book.xml 引用 book.css 
4. 用浏览器打开 book.xml 文件

book.css

name{
    font-size: 10px;
    color:red;
}
price{
    font-size: 12px;
    color:green;
}
author{
    font-size: 14px;
    color:blue;
}

book.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--让 book.xml 引用 book.css 文件  -->
<?xml-stylesheet type="text/css" href="book.css"?>
<book id="javaee01">
    <name>JavaWeb 入门</name>
    <price>100</price>
    <author>张三</author>
</book>

xml文件的约束

如果需要限制xml文件出现的元素,那么需要使用到xml文件 的约束技术。
Xml文件的约束技术的作用:限制xml文件出现的元素。

Xml文件的约束技术主要 有两种:
1.dtd文件约束
2.Schema文件约束

Xml文件的约束技术对大家的要求:
1.不要求大家可以写出约束文件。
2.根据提示信息写出一个xml文件即可。

dtd文件约束

方式一:引入外部 的dtd文件。
格式 : 
<!DOCTYPE 根标签  SYSTEM “dtd文件的路径”>

例子: 
<!DOCTYPE 书架 SYSTEM "books.dtd">

方式二: 在xml文件上编写dtd的元素约束。
格式:
<!DOCTYPE 根标签  [定义dtd的元素]>

符号的说明

*    0次或者多次  
+    至少 一次
?    1次或者没有
,    按顺序出现
|    出现其中的一个

Dtd文件

<!ELEMENT 书架 (+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

Xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "books.dtd">
<书架>
    <>
        <书名>xx</书名>
        <作者>xx</作者>
        <售价>xx</售价>
    </>
    
    <>
        <书名>xx</书名>
        <作者>xx</作者>
        <售价>xx</售价>
    </>    
</书架>

Dtd文件

<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte" 
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">

<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>

schema文件约束

dtd文件与schema文件的区别

1.XML Schema符合XML语法结构。 

2.DOM4j很容易解析出XML Schema文档中的内容。 

3.XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。 

4.XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。

名称空间

一个xml文件只能引入一个dtd文件,但是可以引入多个schema文件, 

如果引入多个schema文件的时候很容易就会出现标签名冲突的问题,为了解决该问题提出名称空间的解决方案。

名称空间很像java中的包名。 

targetNamespace: 给schema文件指定名称空间的。

elementFormDefault: xml文件的元素必须按照schema文件的元素出现。

引入schema文件

xmlnamespace="http://www.zidingyi.cn"    
引入shcema文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
代表着下面的xml文件都是符合xml文件约束规范的。

xsi:schemaLocation="http://www.zidingyi.cn book.xsd     
指定名称空间对应的schema文件所在的路径。

Xsd文件

<?xml version="1.0" encoding="ISO-8859-1" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.zidingyi.cn/shiporder"
    elementFormDefault="qualified">

<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="orderperson" type="xs:string"/>
   <xs:element name="shipto">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="item" maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:positiveInteger"/>
      <xs:element name="price" type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="orderid" type="xs:string" use="required"/>
 </xs:complexType>
</xs:element>

</xs:schema>

Xml文件

<?xml version="1.0" encoding="UTF-8"?>
<shiporder orderid="11" xmlns="http://www.zidingyi.cn/shiporder"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.zidingyi.cn/shiporder shiporder.xsd">
    <orderperson></orderperson>
    <shipto>
        <name></name>
        <address></address>
        <city></city>
        <country></country>
    </shipto>
    
    <item>
        <title></title>
        <quantity>12</quantity>
        <price>12</price>
    </item>
</shiporder>

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页