xml

  可扩展标记语言

  可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。
  
中文名
可扩展标记语言
外文名
Extensible Markup Language
类    型
标记语言
外语缩写
XML(也做文件扩展名)
中文缩写
可扩标言
其他称呼
可扩展置标语言、可扩展标识语言
它被设计用来传输和存储数据;[1] 
超文本标记语言被设计用来显示数据。
它们都是标准通用标记语言的子集。
一、什么是可扩展标记语言?
  • 可扩展标记语言是一种很像超文本标记语言的标记语言。
  • 它的设计宗旨是传输数据,而不是显示数据。
  • 它的标签没有被预定义。您需要自行定义标签。
  • 它被设计为具有自我描述性。
  • 它是W3C的推荐标准。
二、可扩展标记语言和超文本标记语言之间的差异
它不是超文本标记语言的替代。
它是对超文本标记语言的补充。
它和超文本标记语言为不同的目的而设计:
  • 它被设计用来传输和存储数据,其焦点是数据的内容。
  • 超文本标记语言被设计用来显示数据,其焦点是数据的外观。
超文本标记语言旨在显示信息,而它旨在传输信息。
对它最好的描述是:它是独立于软件和硬件的信息传输工具。
三、可扩展标记语言是W3C的推荐标准
XML 于 1998 年 2 月 10 日成为 W3C 的推荐标准。
四、可扩展标记语言无所不在
超文本标记语言。
XML 是各种应用程序之间进行数据传输的最常用的工具。
 

格式特性

编辑
它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,它仅仅是存储数据。事实上它与其他数据表现形式最大的不同是:它极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同。
它和超文本标记语言语法区别:超文本标记语言的标记不是所有的都需要成对出现,它则要求所有的标记必须成对出现;HTML标记不区分大小写,它则大小敏感,即区分大小写。
 

结合

标准通用标记语言、超文本标记语言是它的先驱。标准通用标记语言它是国际上定义电子文件结构和内容描述的标准,是一种非常复杂的文档的结构,主要用于大量高度结构化数据的防卫区和其他各种工业领域,利于分类和索引。同它相比,定义的功能很强大,缺点是它不适用于Web数据描述,而且标准通用标记语言软件价格非常昂贵。 HTML相信大家都比较熟悉,即超文本标识语言,它的优点是比较适合web页面的开发。但它有一个缺点是标记相对少,只有固定的标记集如<p>.<strong>等。缺少标准通用标记语言的柔性和适应性。不能支持特定领域的标记语言,如对数学、化学、音乐等领域的表示支持较少。举个例子来说,开发者很难在网页上表示数学公式、化学分子式和乐谱。它结合了标准通用标记语言和HTML的优点并消除其缺点。XML仍然被认为是一种标准通用标记语言。比标准通用标记语言要简单,但能实现标准通用标记语言的大部分的功能。1996年的夏天,标准通用标记语言,使其在Web中,既能利用标准通用标记语言的长处,又保留html的简单性。
XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows, Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析它,并以XML格式输出结果。
 

友好

为了使得标准通用标记语言显得用户友好,它重新定义了标准通用标记语言的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得标准通用标记语言在设计网站时显得复杂化。它保留了标准通用标记语言的结构化功能,这样就使得网站设计者可以定义自己的文档类型,它同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。

语法

编辑
可以在可扩展标记语言文件的内容包括几乎所有的万国码Unicode字符(以下例子使用本条例,以<?开头的文档序言部分标记不能使用此条例),元素和属性的名称也可以由非ascii字符组成。[2] 
标准通用标记语言常用来定义针对HTML的文档类型定义(DTD),同时它也常用于编写XML的DTD。标准通用标记语言的问题就在于它允许出现一些奇怪的语法,这让创建HTML的解析器成为一个大难题:
  1. 某些起始标签可以选择性出现结束标签或者隐含了结束标签。
  2. 某些起始标签要求必须出现结束标签,例如HTML中<script>“脚本”标签。
  3. 标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的,例如,This is asamplestring是正确的。
  4. 某些特性要求必须包含值,例如<图片 源="百度百科.jpg">中的源特性。
  5. 某些特性不要求一定有值,例如中的“不换行”(外语:nowrap)特性。
  6. 定义特性的两边有没有加上双引号都是可以的,所以都是允许的。
 
这些问题使建立一个标准通用标记语言的解析器变成了一项艰巨的任务,判断何时应用以上规则的困难导致了标准通用标记语言语言的定义一直停滞不前,以这些问题作为出发点,XML逐渐步入我们的视野。
XML去掉了之前令许多开发人员头疼的标准通用标记语言的随意语法。在XML中,采用了如下的语法:
一、任何的起始标签都必须有一个结束标签。
二、可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<百度百科词条/>。XML解析器会将其翻译成<百度百科词条></百度百科词条>。
三、标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如这是一串百度百科中的样例字符串。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
四、所有的特性都必须有值。
五、所有的特性都必须在值的周围加上双引号。
这些规则使得开发一个XML解析器要简便得多,而且也除去了解析标准通用标记语言中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言,包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO,而同时也将HTML改进为XHTML。
 

应用

编辑
可扩展标记语言是一种元标记语言,即定义了用于定义其他特定领域有关语义的、结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识。XML 文档定义方式有:文档类型定义(DTD)和XML Schema。DTD定义了文档的整体结构以及文档的语法,应用广泛并有丰富工具支持。XML Schema用于定义管理信息等更强大、更丰富的特征。XML能够更精确地声明内容,方便跨越多种平台的更有意义的搜索结果。它提供了一种描述结构数据的格式,简化了网络中数据交换和表示,使得代码、数据和表示分离,并作为数据交换的标准格式,因此它常被称为智能数据文档。
XML技术已经广泛应用于e-Learning应用系统的开发,大多数的商用e-Learning平台都支持XML标准。一些主要的网络设备制造商,如CISCO、JUNIPER等,生产的网络设备也已提供了对XML的支持,以利于今后基于XML的网络管理。
  • XML在e-Learning管理中的应用
一、兼容现有协议
XML文档格式的管理信息可以很容易地通过HTTP 协议传输,由于HTTP是建立在TCP之上的,故管理数据能够可靠传输。XML还支持访问XML文档的标准API,如DOM,SAX,XSLT,Xpath等。
二、统一的管理数据存取格式
XML能够以灵活有效的方式定义管理信息的结构。以XML格式存储的数据不仅有良好的内在结构,而且由于它是W3C提出的国际标准,因而受到广大软件提供商的支持,易于进行数据交流和开发。现有网络管理标准如TMN、SNMP等的管理信息库规范决定了网管数据符合层次结构和面向对象原则,这使得以XML格式存储网管数据也非常自然,易于实现。
三、不同应用系统间数据的共享和交互
只要定义一套描述各项管理数据和管理功能的XML语言,用Schema对这套语言进行规定,并且共享这些数据的系统的XML文档遵从这些Schema,那么管理数据和管理功能就可以在多个应用系统之间共享和交互。
四、底层传输的数据更具可读性
网络中传输的底层数据因协议不同而编码规则不同,虽然最终传输时都是二进制位流,但是不同的应用协议需要提供不同的转换机制。这种情况导致管理站在对采用不同协议发送管理信息的被管对象之间进行管理时很难实现兼容。如果协议在数据表示时都采用XML格式进行描述,这样网络之间传递的都是简单的字符流,可以通过相同的XML解析器进行解析,然后根据不同的XML标记,对数据的不同部分进行区分处理,使底层数据更具可读性。[3] 
五、它和json都是一种数据交换格式
XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;以及可扩展链接语言(Extensible Link Language,XLL)。
(1)DTD
DTD规定了文档的逻辑结构。它可定义文档的语法,而文档的语法反过来也能够让XML语法分析程序确认页面标记使用的合法性。DTD定义了页面的元素、元素的属性及元素和属性间的关系。元素与元素间用起始标记和结束标记来定界,对于空元素,用一个空元素标记来分隔。每一个元素都有一个用名字标识的类型,也称为它的通用标识符,并且它还可以有一个属性说明集。每个属性说明都有一个名字和一个值。理想定义应该面向描述与应用程序相关的数据结构,而不是如何显示数据。就是说,应该把一个元素定义为一个标题行,之后让样式表和脚本定义显示标题行。
DTD不具强制性。对于简单的应用程序来说,开发商不需建立自己的DTD,可以使用预先定义的公共DTD或不使用。即使某个文档已经有DTD,只要文档组织是良好的,语法分析程序也不必对照DTD来检验文档的合法性。服务器可能己执行了检查,所以检验的时间和带宽将得以大幅度节省。
(2)XSL
XSL是用来规定XML文档样式的语言。XSL能使Web浏览器改变原有文档的表示法,例如改变数据的显示顺序,不必再与服务器进行交互通信。通过样式表的变换,同一文档可以显示得更大,或经过折叠只显示外面的一层,或者变为打印格式。
XSL凭借其本身的可扩展性,能够控制无穷无尽的标记,而且控制每个标记的方式也是无穷尽的,这也给Web提供了高级的布局特性。如文本的旋转、多列和独立区域。同时支持国际书写格式,可在一页上混合使用从左至右、从右至左及从上至下的书写格式。就如同XML介于HTML和SGML之间一样,XSL标准是介于CSS和SGMI的文档样式语义和规范语言之间的。
(3)XLL
XLL支持Web上已有的简单链接,而且将进一步扩展链接,包括终结死链接的间接链接及可从服务器中只查询某个元素的相关部分链接等。
超文本标记语言(HTML)仅仅执行历来与超文本系统概念相关的极少功能,仅支持最简单的链接形式,即指向硬编码位置的单向链接,这与XML相比有着很大的差别。在为XML所设想的真正超文本系统中,所有典型的超文本链接机制全部将得到支持,包括:与位置无关命名,双向链接,可在文档外规定和管理的链接,元超链接(如环路、多个窗口),集合链接(多来源),Transc1usion(链接目标文档是链接源文档的一部分),链接属性(链接类型)。
所有这些可通过XLL来实现。由于XML以SGML作为基础,因此,XLL基本上属于Hytime(超媒体/基于时间的结构语言,ISO10744)的一个子集,另外它还遵循文本编码所倡议规定的链接概念。
XML能方便有效地表示结构化数据,这就使得XML可以作为描述和传输数据的手段。使用XML进行数据交换已经成为计算机软件领域的标准技术模式。通过XML实现数据的标准化、结构化,解决了在不同平台、不同系统之间的数据结构/模式的差异,使得数据层在XML技术的支持下统一起来。[4] 
Web Service全部的规范,技术都是以XML为底层核心和构架基础的,对Web Service而言,SOAP、WSDL和UDDI,都是使用XML作为信息描述和交换的标准手段。XML技术的产生促使了Web Service技术的产生与发展。
 
---------------------------------------------------------------------言归正传
 
  为什么学习XML
1.你的公司使用Windows平台开发ASP.NET网站,网站需要和另一个公司下Linux平台开发的JSP进行数据交互,如何实现?
2.网易要实时的显示股市的信息,他们的网站基于ASP.NET实现,而证券公司使用C++编写的程序,两者如何实现?
3......
这些问题都可以使用XML解决
 
  提示
1.<?xml version="1.0" encoding="UTF-8"?>是XML声明,它一般是XML文档的第一行。xml声明由以下两个部分组成:
  (1)version:文档符合XML1.0规范。
  (2)dencoding:文档字符编码,默认为UTF-8。
2.<!--注释内容-->,代表XML的注释内容。注释不能嵌套。
 
  特点
1.XML中的每对标记通常被称为节点,它们是成对出现而且必须是成对出现的,用来描述这个节点存储的内容,在节点中存储的信息。
2.XML中用于描述数据的各个节点可以自由扩展,也就是说XML用于描述信息的标记不是固定不变的。
3.XML文件中的节点区分大小写,例如,<Name></Name>和<name></name>,即使两个节点的内容相同,XML也认为它们是两个不同的节点。
 
    操作XML的方法
  解析XML文件
static void Main(string[] args)
        {
            XmlDocument myXml = new XmlDocument();
            myXml.Load("Engineer.xml");//读取指定的XML文档
            XmlNode engineer = myXml.DocumentElement;//读取XML的根节点
            foreach (XmlNode node in engineer.ChildNodes)//对子节点进行循环
            {
                //将每个节点的内容显示出来
                switch (node.Name)
                {
                    case "ID":
                        Console.WriteLine("ID{0}",node.InnerText);
                        break;
                    case "Name":
                        Console.WriteLine("姓名{0}", node.InnerText);
                        break;
                }
            }
            Console.ReadKey();
        }

1.XmlDocument对象可表示整个XML文档,它使用Load()方法将指定的XML文件读入XmlDocument对象,Load()方法的参数是XML文档的路径。属性DocumentElement用于获取XML文件的根节点。

2.XmlNode对象表示一个XMl中的节点。ChildNodes属性用于获取节点下的所有节点。节点的Name属性可以获取当前节点的名称,如<ID>1001</ID>,node.Name获取的是ID。而节点的InnerText属性用于获取当前节点的值,如<ID>1001</ID>,node.InnerText获取的是1002.

操作XML的对象属性和方法
  DocumentElement 获取根节点
XmlDocument ChildNodes 获取所有子节点
  Load 读取整个XML的结构
     
  InnerText 当前节点的值
XMLNode Name 当前节点的名称
  ChildNodes 当前节点的所有子节点

    用TreeView显示数据

  给TreeView添加节点用Add()方法。

//创建一个treeNode节点
TreeNode rootNode-new TreeNode(this.txtTitle.Text)
this.tvMenu.Nodes.Add(rootNode).

//Add()方法的参数可以是文本
tvMenu.Nodes.Add("文字");

//Add()方法的返回值是当前添加的节点对象
TreeNode  rootNode;
rootNode=this.tvMenu.Nodes.Add("对象");

//给选中的节点添加子节点
this.tvMenu.SelectedNode.Nodes.Add(node);
TreeView的属性和重要事件
属性 说明
Nodes TreeView
SelectedNode 当前TreeView控件中选中的树节点,如果当前没有选中树节点,返回值null
重要事件 说明
AfterSelect 选中树节点之后发生
TreeNode的属性
Text 节点显示的文本
Index 节点在所在集合的索引
Level 节点在树桩菜单中的层级0,1...
Tag 节点值
Nodes 节点的所有下一级节点
  TreeView动态删除节点
//删除选中的节点
this.tvMenu.SelectedNode.Remove();

//清空选中的节点的子节点
this.tvMenu.SelectedNode.Nodes.Clear();

//清空TreeView控件的所有子节点
this.tvMenu.Nodes.Clear();
原文地址:https://www.cnblogs.com/cnsdhzzl/p/5237713.html