前面我们讲了一下XML相关的基础知识(一),下面我们在加深一下,看一下XML高级方面。

一、命名空间

1、命名冲突

XML命名空间提供避免元素冲突的方法。

命名冲突:在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的原俗名时,就会发生命名冲突。例如:下面这个XML文档携带者某个表格中的信息:

 <table>
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>

这个XML文档携带有关桌子的信息(一件家具):

 <table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

假如这两个XML文档被一起使用,由于两个文档都包含带有不同内容和定义的<table>元素,就会发生命名冲突。XML解析器无法确定如何处理这类冲突。

2、使用前缀来避免命名冲突

此文档带有某个表格的信息:

<table>
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

此XML文档携带着有关一件家具的信息:

<f:table>
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

现在,命名冲突不存在了,这是由于两个文档都使用了不同的名称来命名他们<table>元素(<h:table>和<f:table>),通过使用前缀,我们创建了两种不同类型的<table>元素。

2、使用命名空间

这个XML文档携带着某个表格的信息:

<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:tr>
<h:td>Apples</h:td>
<h:td>Bananas</h:td>
</h:tr>
</h:table>

此XML文档携带着有关一件家具的信息:

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

与仅仅使用前缀不同,我们为<table>标间添加了一个xmlns属性,这样就为前缀赋予了一个与某个命名控件相关联的限定名称。

3、XML Namespace(xmlns)属性

XML命名空间属性被放置于元素的开始标间之中,并使用语法:xmlns:namespace-prefix="namespaceURI"

当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间关联。

注释:用于标示命名空间的地址不会被解析器用于查找信息,其唯一的作用是赋予命名空间一个唯一的名称,不过,很多公司常会作为指针来使用命名空间指向实际存在的网页,这个网页包含命名空间的信息。

4、统一资源标识符(Uniform Resource Identifier(URL))

统一资源标识符是一串可以标识因特网资源的字符。最常用的URI是用来标识因特网域名地址的统一资源定位器(URL),另一个不那么常用的URI是统一资源命名(URN)。在我们的例子中,我们仅使用URL。

5、默认的命名空间(Default Namespace)

为元素定义默认的命名空间可以让我们省去在所有子元素中使用前缀的工作。语法:xmlns="namespaceURI"

这个XML文档携带着某个表格中的信息:

<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>

此XML文档携带着有关一件家具的信息:

<table xmlns="http://www.w3school.com.cn/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>

6、命名空间的实际应用

当开始使用XSL时,您不久就会看到实际使用中的命名空间。XSL样式表用于将XML文档转换为其他格式,比如HTML。如果您仔细观察下面这个XSL文档,就会看到大多数的标签都是HTML标签。非HTML的标签都有前缀xsl,并由此命名空间标示:“http://www.w3.org/1999/XSL/Transform”:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

二、CDATA区段

所有XML文档中的文本均会被解析器解析,只有CDATA区段(CDATA section)中的文本会被解析器忽略。

1、PCDATA

PCDATA指的是被解析的字符数据(Parsed Character Data)。XML解析器通常会解析XML文档中所有的文本,当某个XML元素被解析时,其标签之间的文本也会被解析,如:<message>此文本也会被解析</message>

解析器之所以这么做是因为XML元素可以包含其他元素,就像下面例子中<name>元素包含着另外的两个元素first和last:<name><first>Bill</first><last>Gates</last></name>

而解析器会把它分解为像这样的子元素:

<name>
<first>Bill</first>
<last>Gates</last>
</name>

2、转义字符

非法的XML字符必须被替换为实体引用(entity reference)

假如您在XML文档中放置了一个类似“<”的字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始,因此你不能这样写:<message>if salary < 1000 then</message>。为了避免此类错误,需要把字符“<”替换为实体引用,就像这样:<message>if salary &lt; 1000 then</message>。

在XML中,有5个预定义的实体引用:

注释:严格的讲,在XML中仅有字符“<”和“&”是非法的,省略号,引号和大于号是合法的,但是把他们替换为实体引用是个好习惯。

3、CDATA

术语CDATA指的是不应由XML解析器进行解析的文本数据(Unparsed Character Data)。在XML元素中,“<”和“&”是非法的。"<"会产生错误,因为解析器会把该字符解释为新元素的开始。"&"也会产生错误,因为解析器会把该字符解析为字符实体的开始。某些文本,比如JavaScript代码,包含大量的“<"和“&”字符,为了避免错误,可以将脚本代码定义为CDATA。CDATA部分中的所有内容都会被解析器忽略。CDATA部分由"<![CDATA["开始,由“]]>”结束:

<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

在上面的例子中,解析器会忽略CDATA部分中的所有内容。

注意:CDATA部分不能包含字符串”]]>“,也不允许嵌套的CDATA部分。标记CDATA部分结尾的”]]>“不能包含空格或折行。

好了,关于这次的XML相关知识分享,本次就先到这里。

XML的相关基础知识分享(二)的更多相关文章

  1. XML的相关基础知识分享

    XML和Json是两种最常用的在网络中数据传输的数据序列化格式,随着时代的变迁,XML序列化用于网络传输也逐渐被Json取代,前几天,单位系统集成开发对接接口时,发现大部分都用的WebService技 ...

  2. iOS蓝牙开发(二)蓝牙相关基础知识

    原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...

  3. 【RAC】RAC相关基础知识

    [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁. ...

  4. JAVA相关基础知识

    JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分, ...

  5. 深入理解mysql之BDB系列(1)---BDB相关基础知识

        深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富   一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1 ...

  6. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  7. LeetCode刷题191130 --基础知识篇 二叉搜索树

    休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...

  8. GO基础知识分享

    目录 GO基础知识分享 go语言的基本事项 关键字 字符串的拼接和变量的定义方式 空白符 const常量 iota的用法 运算符 Go 没有三目运算符,不能适用?: 语言条件语句 for循环的方式 函 ...

  9. WEB前端需要了解的XML相关基础知识

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

随机推荐

  1. 许家印67亿买下FF恒大是要雪中送炭吗?

    从大环境来看,当下新能源汽车已经是备受投资者青睐的领域.据不完全统计,当下国内已经有300余家电动汽车企业.而蔚来.小鹏.威马等动辄都融资上百亿元,显现出火爆的发展趋势.甚至就连董明珠董大姐也有着自己 ...

  2. MySQL出现错误1030-Got error 28 from storage engine

    磁盘空间不足引起的!1030-Got error 28 from storage engine df -h 清理空间

  3. Windows环境搭建 face_recognition,dlib

    文章参考:https://blog.csdn.net/hongbin_xu/article/details/76284134 文章参考:https://blog.csdn.net/weixin_404 ...

  4. iOS 一种很方便的构造TarBar

    直接在TarBarController中操作,代码如下: #import "DLTabBarController.h" #import "ViewController.h ...

  5. 4418开发板基于Linux-c测试程序的编译和运行

    基于iTOP4418开发板的Linux-c的测试程序iTOP-4418 开发板可以运行的文件系统很多,在具体的文件系统上实现特定功能前,可以使用 Linux-c 程序来测试硬件以及驱动.而且这些程序很 ...

  6. 华为鸿蒙系统pk安卓系统

    Harmony OS Vs Android Comparison It isn’t based on Linux kernel The key difference between HarmonyOS ...

  7. 记录ionic 最小化应用时所遇的问题

    ionic3与ionic4最小化插件安装不一样: ionic3安装方法: $ ionic cordova plugin add cordova-plugin-appminimize $ npm ins ...

  8. 2. Unconstrained Optimization(2th)

    2.1 Basic Results on the Existence of Optimizers 2.1. DefinitionLet $f:U->\mathbb{R}$ be a functi ...

  9. Ubuntu 12.04 搭建TFTP服务器

    吐槽先:在Ubuntu上搭建TFTP服务器,网上搜到一堆资料,可惜基本都是部分能用,至于哪些部分能用还要自己摸索着试出来,郁闷之情仅次于找不到任何资料…… ---------------------- ...

  10. C语言中传值和C++的传引用

    在C语言中,传址其实也时传值的一种,首先地址其实也时可以看做是一个值来进行传递的. 在C++中有一种说法叫传引用,就是&变量名. 比如: /* * 传值 int a = 3; void fun ...