XML是Extensible Markup Language(可扩展标记语言)的简称。XML是一种以简单文本格式存储数据的方式,这意味着它可以被任何计算机读取。XML是在Internet上传书数据的绝佳格式。通过使用XML,数据可存储于HTML之外。

  XML最大的优势在于:XML是跨平台的、用于传输信息且独立于软件和硬件的工具。

  下面举一个很简单的例子来说明它对于传输信息的重要性。

  Jani写给Tove的便签,存储为XML:

1 <note>
2  <to>Tove</to>
3  <from>Jani</from>
4  <heading>Reminder</heading>
5  <body>Don't forget me this weekend!</body>
6  </note>

一、XML文档

  XML中的完整数据集就是XML文档。XML文档可以是计算机上的物理文件,获知内存中的字符串。但是其本身必须是完整的,必须遵循一定的规则。XML文档由许多不同的部分组成。其中最重要的部分是XML元素,它包括文档的实际数据。

1、XML元素

  XML元素包含一个开标记(放在尖括号中的元素名称,比如<myElement>)、元素中的数据和闭标记(与开标记想通,但是在左括号后有一个斜线:</myElement>)。例如定义一个存储书名的元素:

1 <book>Tristram Shandy</book>  

  注意:元素是区分大小写的!例如:<book>和<Book>是不同的!

  元素也可以包含其他元素,因此可以修改此<book>元素,添加两个子元素,使之包括作者和标题:

1 <book>
2 <title>Tristram Shandy</title>
3 <author>Lawrence Sterne</author>
4 </book>
5

  但是元素不允许重叠!例如:

<book>
<title>Tristram Shandy
<author>Lawrence Sterne
</title></author>
</book>

  这样是错误的!

2、XML属性

  与在元素体内存储数据一样,也可以在属性内存储数据,属性添加到元素的开标记内。属性的形式为:

  Name = “value”

  其中属性值必须包含在单引号或者双引号内。例如:

<book title=”Tristram Shandy”></book>

  或者:

<book title = ‘Tristram Shandy’></book>

3、XML声明

  XML文档的各个组成部分称为节点----因此元素、元素内的文本和属性都是XML文档的节点。但是只有一种类型的节点存在几乎所有的XML文档中,这就是XML声明,如果包括了它,它就必须是文档的第一个节点。

  XML声明的格式类似于元素,但是在尖括号内有问号。它一贯的名称是xml,并总是有version属性。最简单的XML声明形式为:

<?xml version = “1.0”?>

4、XML文档的结构

  XML数据是分层组织的,有点类似于Windows Explorer中的文件夹和文件。每一个文档必须有一个根元素,该元素是所有其他元素的父元素。XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。在这个根元素下包含了其他所有的元素和文本数据。如果在文档的顶级中有多个元素,改文档就是不合法的XML文档。但是可以在顶级包括其他XML节点,所有元素均可拥有子元素。所有的XML元素都必需有闭标签。下面的XML文档是合法的:

1 <?xml version=’1.0’?>
2 <books>
3 <book>Mody Dick</book>
4 <book>Tristram Shandy</book>
5 <book>Ulysses</book>
6 </books>
7  

  但是下面的文档就不合法:

<?xml version=’1.0’?>
<book>Mody Dick</book>
<book>Tristram Shandy</book>
<book>Ulysses</book>

  XML文档不需要任何预定义的结构。这是传统关系数据库和XML的主要区别之一。信息存储在XML中时不需要这个初始设置,所以XML是存储小块数据的非常方便的方式。

5、XML命名空间

  先来看看下面的例子。一个XML文档中包含了一个表格的信息:

1 <table>
2 <tr>
3 <td>Apples</td>
4 <td>Bananas</td>
5 </tr>
6 </table>
7

  而另一个文档中包含了一个桌子的信息(一件家具):

1 <table>
2 <name>African Coffee Table</name>
3 <width>80</width>
4 <length>120</length>
5 </table>
6

  假如这两个 XML 文档被一起使用,由于两个文档都包含带有不同内容和定义的 <table> 元素,就会发生命名冲突。怎么解决呢?有两种方法,一种是使用前缀,一种是使用命名空间。

  1)使用前缀

  带有表格信息的文档:

1 <h:table>
2 <h:tr>
3 <h:td>Apples</h:td>
4 <h:td>Bananas</h:td>
5 </h:tr>
6 </h:table>
7

  带有桌子信息的文档:

<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)使用命名空间

  带有表格信息的文档:

<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>

  带有桌子信息的文档:

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

  与使用前缀不同,我们为<table> 标签添加了一个 xmlns 属性,这样就为前缀赋予了一个与某个命名空间相关联的限定名称。与使用前缀相比,感觉使用命名空间不过是在<table>标签上多加了个xmlns的属性而已,既然效果一样,为什么还要多次一举呢(多加一个标签)?至于为什么要使用命名空间的好处,我的理解还不是很深刻,请大家多多赐教。

二、XML文档的验证

  现在一般使用两种验证方法:XMLDTD和XML Schema。

1、XML DTD

  文档类型定义(DTD)可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。DTD可被成行地声明于XML文档中,也可作为一个外部引用。

带有 DTD 的 XML 文档实例(请在 IE5 以及更高的版本打开,并选择查看源代码):

代码

1 <?xml version="1.0"?>
2  <!DOCTYPE note [ <!--定义此文档是 note 类型的文档-->
3 <!ELEMENT note (to,from,heading,body)><!--定义 note 元素有四个元素:"to、from、heading,、body"-->
4 <!ELEMENT to (#PCDATA)><!--定义 to 元素为 "#PCDATA" 类型-->
5 <!ELEMENT from (#PCDATA)><!--定义 frome 元素为 "#PCDATA" 类型-->
6 <!ELEMENT heading (#PCDATA)><!--定义 heading 元素为 "#PCDATA" 类型-->
7 <!ELEMENT body (#PCDATA)><!--定义 body 元素为 "#PCDATA" 类型-->
8 ]>
9  <note>
10 <to>George</to>
11 <from>John</from>
12 <heading>Reminder</heading>
13 <body>Don't forget the meeting!</body>
14  </note>
15  

  具体内容参考http://www.w3cschool.cn上的标准。

2、XML Schema

  XML Schema 是基于 XML 的 DTD 替代者。

  XML Schema 描述 XML 文档的结构。

  XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。

  这部分的内容太多了,改天专门整理一个文档。具体内容参考http://www.w3cschool.cn上的标准。

三、使用javascript解析XML

  创建的book.xml如下:

代码

1 <?xml version="1.0" encoding="utf-8" ?>
2 <books>
3 <book title="平凡的世界">
4 <author>路遥</author>
5 </book>
6 <book title="水浒传">
7 <author>施耐庵、罗贯中</author>
8 </book>
9 <book title="西游记">
10 <author>吴承恩</author>
11 </book>
12 </books>
13

  客户端代码如下:

代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>使用javascript解析XML</title>
<script type="text/javascript" language="javascript">
function CreateXMLParser(xmlDocPath)//创建XML文档解析器
{
var parser;
try
{
//使用IE浏览器
parser=new ActiveXObject("Microsoft.XMLDOM");//创建一个空的微软XML文档对象
}
catch(e)
{
try
{
//使用Firefox,Mozilla,Opera浏览器
parser=document.implementation.createDocument("","",null);
}
catch(e)
{
alert("您的浏览器不支持对XML文档的解析,请您升级浏览器");
return null;
}
}
parser.async="false";//关闭异步加载,确保在文档完全加载之前解析器不会继续脚本的执行
parser.load(xmlDocPath);//加载名为“book,xml”的XML文档
return parser;
}
function getMsgFromXMLDoc(xmlDocPath)//从xml文档中读取信息
{
var xmlParser = CreateXMLParser(xmlDocPath);
if(xmlParser==null)
return;

//开始从xml解析器中读取信息
var msg="";
var books=xmlParser.getElementsByTagName("book");//得到xml文档中所有的<book>元素
for(var i=0;i<books.length;i++)//遍历所有的<book>元素
{
var book=books[i];//得到一个book元素
msg = msg+"书名:";
msg = msg+book.attributes[0].value;//读取book元素的属性
msg = msg+" 作者:";
msg = msg+book.childNodes[0].text;//读取book元素的子元素中的数据
msg = msg+"\n";
}
alert(msg);
}

</script>
</head>
<body onload="getMsgFromXMLDoc('book.xml')">
</body>
</html>

  从上面的代码得知,使用javascript解析xml需要如下步骤:

  1、创建xml解析器。IE浏览器使用ActiveXObjec。其他浏览器使用document.implementation.createDocument()方法。

  2、关闭异步加载。

  3、加载XML文档。

  4、读取XML文档的信息。

  本文参考了http://www.w3cschool.cn上大量的标准和教程,大家可以在这个网站得到更多关于XML和其他Web技术的标准和教程。

转载于:https://www.cnblogs.com/carlbiao/archive/2010/08/27/1810097.html

ArcGIS客户端开发学习笔记(二)——XML相关推荐

  1. ArcGIS客户端开发学习笔记(五)——ArcGIS REST API基础

    REST:表述性状态转移(REpresentational State Transfer)的简称,它定义了应该如何正确地使用Web标准. 目前我的水平还没到能够深入理解REST的地步,就连略懂皮毛都没 ...

  2. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

  3. Polyworks脚本开发学习笔记(二)-TREEVIEW基本操作

    Polyworks脚本开发学习笔记(二)-TREEVIEW对象基本操作 TREEVIEW对象选择 选择/不选对象 TREEVIEW OBJECT SELECT ALL 全部对象选择,包括参考/数据/对 ...

  4. Polyworks脚本开发学习笔记(二二)-调取视角用脚本自动生成报告

    Polyworks脚本开发学习笔记(二二)-调取视角用脚本自动生成报告 Polyworks中,3D场景的视图可用标准视角及等轴侧视角.项目视角等方式调用,也可以用txt格式保存下来调用,如果以脚本的形 ...

  5. 龙芯1C300B主板V3.4嵌入式开发学习笔记二

    1 PMON更新 接着笔记一:https://blog.csdn.net/weixin_38709708/article/details/81271493 笔者手中的开发板一开始就烧写了PMON,当是 ...

  6. iOS开发学习笔记二:UITableView(1)

    一:TableViewController 1:删掉默认的ViewController 拖动一个TableViewController 2:新建一个Cocoa Touch Class,命名为:Tabl ...

  7. linux驱动开发学习笔记二十一:异步通知

    一.异步通知简介 我们首先来回顾一下"中断",中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, ...

  8. 微信平台开发学习笔记二(翻译功能的实现)

    参考http://www.cnblogs.com/mchina/p/3170565.html 不过看看这些前辈写这些东西的时间,就是感慨啊,13年我还没用微信呢 这里只是简单的实现有道的翻译功能,并且 ...

  9. CAD二次开发学习笔记二(创建一个对话框)

    打开资源视图->右击->添加资源->Dialog 双击对话框,弹出MFC类向导,输入类名FirstClass, 确定,创建对话框类.FirstClass.h与FirstClass.c ...

最新文章

  1. 【以太坊】私有链和测试网的区别
  2. 绝对布局优势_街电福建全场景布局持续深化,构建全时续电服务强化行业领先优势...
  3. 2019牛客多校第四场 B xor (线性基求交)
  4. 公司的Java框架应具备的通用功能
  5. 使用Python和Prometheus跟踪天气
  6. [Ext JS6实战]动态数据绑定
  7. php容器概念,深入thinkphp5.1之Container容器
  8. 规划 SOA 参考架构
  9. 规划--如何成为一名web安全工程师
  10. linux下云翔php,《云翔曲谱》目录
  11. 矩阵转置行列式的运算规律
  12. ant notification通知框 内容支持html标签
  13. 绝顶高手是这样快速画美女的!
  14. 解决:return _compile(pattern, flags).search(string) TypeError: expected string or buffer
  15. hdu 1757【A Simple Math Problem】
  16. C# ComboBox:组合框控件
  17. 站上风口,文心一言任重道远
  18. 计算机网络作业一: 物理层课后作业及答案
  19. 素描人物头像写生的基本规律是有哪些
  20. ibm刀片服务器 系统初始密码,IBM刀片服务器管理模块恢复出厂默认值实战

热门文章

  1. 输入特定字符和只能输入数字。
  2. BGP 同步 黑洞 peergroup rr 联邦 full-mesh
  3. [转]游戏UI与flash 组件开发
  4. 轻博客:企业品牌互动传播利器
  5. 连续性的设计——改善产品的体验
  6. 计算机应用基础 制作表格说课稿,职业教育:计算机应用基础类一等奖作品《Premiere视频制作初体验》说课稿.docx...
  7. linux gnome_GNOME,生日快乐:喜欢这个Linux桌面的8个理由
  8. moodle 分配系统角色_如何安装Moodle学习管理系统
  9. openstack 教程_OpenStack的新提示,技巧和教程
  10. devops实践指南_开发DevOps的实用指南:减少八卦的步骤