XML基础

虽说我认为上面的东西基本上不言自明,但我也意识到,很多人并不是很清楚XML的基本概念。所以,我准备把上面的东西解释一遍,只解释那些我认为确实有必要解释的东西。
一个XML文档就是一个文本文档。跟普通文本文档完全相同。只不过,它可能会比别的文本文档多了一些限制而已。一般来说,我们对于XML文档的直观认识就是:里面有大量的尖括号:)。是的,确实如此。XML文档被要求是Unicode字符集的文本文档。当然,它可能有多种编码方式(比如:utf7、utf8、utf16le、utf16ge等等),但这不是我们关注的焦点。顺便说一句,xml文档一般不需要bom字符,当然如果你加上了bom,你的xml必须没有prolog。后面我会讲到prolog是啥。
xml的基本思想就是对文本数据打上标记,用以更精确的表达这些文本数据的含义。举个例子1977/2/19 5:55:00这个文本数据,我们直觉它应该是一个timestamp,但是实际上它可能是任意东西,比如一种食品的名称:),虽然显得有些怪异。而如果我们用<birthday>1977/2/19 5:55:00</birthday>来表达这个数据,我们就有把握的说,这个数据是一个生日。注意:尖括号中的数据是用来说明原始数据的,它们被称作标签。前面的那个叫做前标签,后面的那个叫做后标签。tag。注意它们的特征。前后相同,后面多了一个/,都是用<>括起来的。这就是XML,也就是一种给数据打标签的方式。数据加上标签作为一个整体被称为一个元素。Element。

XML中的X表达的是可扩展性,其基本意思就是说:XML本身没有定义任何tag,你可以用你觉得舒服的任何tag对数据作标记,设想一下我们比较熟悉的HTML,会发觉其实它就是规定了tag集合的一种标记语言。

<深入>
有时候我们也会迷惑,如果没有任何预定义的tag,我们对数据进行标记岂不是成了自己逗自己玩?是啊,我自己用了一个标记,想用来表达某些含义,可是谁知道是什么含义呢?除了我自己?如果大家都不知道,我这个标记还有更大的意义么?
可以说,上面这个问题是一个本质问题。如果我们找不到XML存在的意义,我们就不值得去学习它,不是么?
我要提到的一个概念叫做XML Application。什么是XML Application?它就是:规定了一系列tag的含义的一个XML规范。我们可以而且也只能用这些被规定好的tag来标记数据了。又有人不明白了,这……这跟HTML还有区别么?我们说,现在看来暂时没有:)。不过马上我就告诉你其中的区别了。
一、HTML是一个全世界统一的标准,而我们的XML Application可以是在一个范围内有效的标准。
这提供了什么好处呢?最大的好处就是,我可以只需要试图说服一部分人而不是所有人都遵守,这样,我的这个约定就比较容易实施。
二、可以有多个约定,也就是说,可以有多个XML Application。
这个的用处大家就比较清楚了,我可以约定一套用于数学公式的标签集合,也可以约定一套用于音乐的标签集合,两者互不干扰。而HTML只有一套tag集合。却试图表达整个世界。
三、这多个XML Application可以互相混合。
哇,太好了,我真的可以描述整个世界了。可是这又会引发一个问题——这些标签冲突怎么办?
这儿,XML引入了一个namespace的概念。简单的说,不是同一个namespace中的标签,就算其名字相同,我们也知道它们是两码事,不会冲突。可是怎么保证namespace的名字不冲突呢?毕竟,我说我的标签都是dup这个namespace里面的,而这并不能阻止你让你的标签也是dup这个namespace。我们的W3C委员会非常聪明的解决了这个问题:它们规定namespace必须是一个URI,通俗的说,就是一个网址。我们知道,网址是保证全球唯一的。但是,由于网址的书写不过方便——毕竟太长了(更深层次的原因是:它们有些字符是不允许出现的),我们被允许可以起一个别名。当然,这个方案对于故意捣乱者也是无能为力……,不过,这就是另一回事情了。
备注:其实,现在已经定义了好多XML Appliction了。有很多已经被公认了,大家都在用:)。当然,这并不阻止你自己定义自己的Application。顺便说一句,定义Application需要使用Schema,有各种Schema可以用,包括DTD,XML Schema(schemaLocation),Schematron,RELAX NG等等。其中,很多都是一个具体的XML Application。哦,我要晕了。
关于名字空间,我给大家一个直观的感受,看例子:
<music:goal xmlns:music = "http://www.music.com/schemas/music">
<music:time music:duration = "3d"/>
<math:item xmlns:math = "http://www.math.com.cn/">
<math:line path = "12, 38, 42, 77"/>
<music:timeStamp math:value = "20082324234" />
</math:item>
</music:goal>
上面的例子中,涉及到两个名字空间,http://www.music.com/schemas/music和http://www.math.com.cn/,对于这俩名字空间,我们起的别名分别是music和math,这样,我们的元素的tag就可以用namespaceName:前缀来区分了。如果我们不理会名字空间,我们完全可以把namespaceName:tagName看成一个整体。另外,强调一下,名字空间的别名是可以随便起的,只要在同一个文档中不重复就行了。
</深入>

一个XML文档要求最多一个元素。不过,需要提醒大家的是,元素可以嵌套,嵌套的层次(深度)没有任何限制。我举个例子大家就会很明白了:
<person>
<name>dup</name>
<birthday>1977/2/19 5:55:00</birthday>
<description>
<strongPoint id = "first">smalltalk</strongPoint>
<strongPoint id = "second">eat</strongPoint>
<interest>play pingpang</interest>
</description>
</person>
上面就是一个元素嵌套的例子。我想大家应该觉得非常简单。形式是不重要的(比如缩进换行什么的)。只要保证正常的嵌套关系没有搞混乱就行。

元素可以直接或者间接递归。比如:x元素可以有叫做x的子元素,或者其子孙中有叫做x的元素。

顺便我把子,子孙,父,祖先这个几个概念说一下。还是上面的例子,name,birthday,description是person的子。所有的子以及子的所有的子,依次递推下去,这些元素的总和叫做子孙。也就是说,直接的子和间接的子。父相对于子。一个元素只能有一个父。比如:strongPoint的父是description。祖先是父以及其父,依次递推直至最上层元素的那个集合,比如:strongPoint的祖先是description,person。

XML文档中,除了Element以外,还有一些别的东西,我一一道来:)。

其实,上面那个嵌套的元素就已经有一些新鲜的玩艺儿了,比如:如果你仔细注意了的话,有几个(确切的说是两个)元素的前标签里面有一些我们以前没有提及的东西,我们把那东西叫属性。Attribute。Attribute的形式是:n = “v”,其中n是任意的字符串。v也是。一个元素可以有任意多个Attribute,它们的n不能重复。n被称作属性名,v被称作属性值。元素的属性一定是放在前标签里面的。

我们把前标签和后标签之间的文本称作Text。这些Text被称作元素的内容。一个元素的内容可以是Text,也可以是其它元素或者其他元素们,甚至可以是空白。当然,还可以是这些东西的组合。

如果一个Text是以<![CDATA[开头,并且以]]>结尾,那么这个Text就被称做是CDATASection,CDATA段。CDATA段一个显著的用意就是禁止被解释。也就是说,CDATA段中的内容,一律按照其原始的形式存在。甚至里面的标签什么的也不会被认为是标签了。只是普通字符而已。

注释是另一种东西,跟元素没有什么关系,它可以出现在在除了标签以外的任何地方,用来进行一个人可以理解的说明。注释的形式如下:<!-- ... -->其中...可以是任何东西,除了--。

DocumentType。文档类型,其实就是用来指定该XML文档所遵循的XML Application的Schema标准的那种东西。到现在为止,我只知道怎么使用它搞定用DTD定义的Schema,对于别的Schema,我不会使用这种方式,而是采用schemaLocation这个属性的方式来引用相关的文档类型定义。说实话,我不知道用schemaLocation这种方式引用Schema算不算文档类型。需要注意的是,如果一个XML没有引用相关的文档类型定义,也就是用于规定标签集合的Schema,那么这个文档就是普通的格式良好的。如果引用了,那么,XML文档的解释器会使用Schema规定的标签集及其结构验证该XML文档是否满足Schema的规定,故此,这时候的XML文档称作可验证的。DocumentType基本上是这样的语法: <!DOCTYPE schemaName PUBLIC "publicId" SYSTEM "systemId">,或许还有一些别的东西,比如规定实体(Entity)和记号(Notation)的,以及规定内部子集的。但是遗憾的是:这些语法我不明白,所以就不描述它们了。深入的东西可以看看inline DTD。
我举个例子说明一个DocumentType是什么样子的:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
这就是一个特别常见和特别有用的DocumentType,其实说到这儿,我似乎应该深入的描述一下publicId的语法结构,但是,巾短话多,我就不烦你了,如果你有兴趣,参见W3C的规范。

Notation就是记号。这个东西说起来也很绕,原因是:我没有搞明白。所以略而不说。不过,可以告诉大家,在XML文档中碰到这个东西的时候非常好,而且就算碰到你也不会有感觉。所以不说也没有什么问题。
<高级>
记号是一个比较高级的主题,涉及到关于不可解析实体的处理问题。由于XML文档是一个纯文本文档,其中需要用tag作一些标记,用来规定数据的一些意义。这样,XML文档只能用来描述那些文本性质的数据。这些数据被称作可解析数据。也就是说,它们能够被XML解释器解析。但是,我们能用XML描述非文本性质的数据么?比如:二进制的数据,更具体的说,比如一个图片,一段音频什么的?我们说:我们的愿望是无穷的,不能这样就屈服了。我们就是要用XML描述二进制文件!可是我们XML的铁律就是不想让它去处理二进制数据啊。这时候,我们就需要Notation了,其实,Notation只是一个名字,一个记号,一个媒体类型,一个指示XML解析器用什么解释器来解释这种媒体。比如:我们定义了一种叫做PNG的Notation,我们就可以这样使用它了,首先,我们要在Schema中定义元素的某个属性,比如:image元素的src属性,然后,我们在XML文档中这样使用了,这样<image src="hello.png" style="width:20px; height:80px" show="embed" />,看看,我们能够描述二进制数据了吧。
在这个过程中,我们的XML解释器就很清楚的知道,image的src属性是一个PNG,它需要用PNG的解释器来帮助它解释这个数据。
也就是说,Notation这样的设施就给了XML部分的表达二进制数据的方式,这种数据从本质上讲是XML解析器不可解析的数据。前面的CDATASection就是一种XML解析器不会去解析的数据,是文本形式的。后面还会讲到的ProcessingInstruction也是一种描述不可解析的数据的手段,也是文本形式的。
</高级>

Entity,实体。最常见的也是必须的几个实体定义是:lt,gt,amp,quot,apos,分别表示<,>,&,",',它们本身是标签和属性需要使用的元字符,所以必须用实体引用来引用它们。

EntityReference就是那种&name;的那种东西,name是实体的名字,实体引用会被在引用处替换为实体本身。

ProcessingInstruction,处理指令。其基本语法如下:<?target content?>target是一个外部程序,content是一个字符串,这个字符串是将会被交给target这个外部程序去解释和处理的。我举个例子来说明:<?php print "hello"?>,这就是一个处理指令,content可以任意复杂,都会交给target取处理。另一个用法是:<?xml-stylesheet href="trans.xsl" type="text/xsl"?>它是一种类似于HTML Link的东西,表示引用trans.xsl这个样式单。这种PI的content的组成方式跟Element前标签的Attributes很像,我们一般称它们为伪属性。

一个比较奇特的符合处理指令语法的但是不是处理指令的东西是:<?xml version="1.0" encoding="UTF-8"?>它跟上面的那个xml-stylesheet PI很像,但用途市绝对不一样的。这个语法要素要么不出现,要么只出现一次,而且必须出现在开头,绝对的开头,它前面不能有任何空白字符。它在某种程度上完成了BOM的作用。

上面所有的东西都被称为节点。所有的这些节点组合以来就是XML文档。Document。

PS:XML规范中对于字符的处理是非常复杂的,但是,我没有描述这些东西,因为,这些东西不太重要(对于普通用户来说),而且,XML规范中对于字符的处理也有点太复杂了。达到了夸张的地步。

好了,这就是XML文档,其实是非常简单的。但是,这个我们上一篇文章中给出的XML Core DOM有什么关系呢?

XML文档是一个普通的文本字节流,而XML Core DOM是一个XML文档解析器根据这个XML文档构造的一颗树,一棵结点组成的树,其根就是称作Document的东西。ok,这就是XML基础的全部。我们可以通过XML Core DOM提供的接口,遍历这一棵树,访问和修改各个节点,凭空生成和插入新的节点,删除某些节点。处理各种用户自定义的数据等等。现在,你能够看明白上一篇文章 的那些接口及其含义了么?
UG/NX二次开发实战:用Python脚本批量更新100个零件参数,解放你的双手 本文详细介绍了如何利用NXOpen Python API进行UG/NX二次开发,实现批量更新100个零件参数的自动化流程。通过环境配置、框架设计、核心代码实现及性能优化,帮助工程师高效完成参数化设计任务,显著提升工作效率。 阅读详情

相关推荐

论文阅读 Quantum Convolutional neural network

在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。

m0_54373077的博客 2002

PNG文件格式白皮书

Portable Network Graphics (PNG) Specification (Second Edition)Information technology — Computer graphics and image processing — Portable Network Graphics (PNG): Functional specification. ISO/IEC 1

yongzhewuwei_2008的专栏 6203

Camera Sensor接口协议全解析(六)聚焦onsemi HiSPi接口的技术突破与应用实践

摘要: Onsemi HiSPi是一种高速并行接口协议,专为高分辨率图像传感器设计,具备1600 Mbps传输速率、低功耗和高兼容性特点。通过对比DVP、MIPI CSI-2等主流协议,HiSPi在工业/医疗领域表现突出,支持动态功耗控制、多ROI和CRC校验。其创新架构包含多PHY设计,提供分组SP、流SP等多种工作模式,满足灵活传输需求。实际应用中,HiSPi在PCB缺陷检测(5μm精度)和液晶面板检测(0.3% Mura检出率)等场景展现卓越性能,成为高速成像领域的关键技术。

GateWorld的博客 1436

java中字节流的分类都有哪些_Java------字节流和字符流(I)

字节流:读写字节文件,通常使用字节流,如:二进制文件,.jpg,.mp3,.avi,.exe,.com,.dllwindows平台的执行文件:.exe,.com,.dll字符流:读写字符文件,通常使用字符流,如:.txt,.java,.css,.doc,.html,*.xml字节流可以读写任意文件。字符流不能读写字节文件。字节流的概念传输的数据单位是字节,也意味着字节流能够处理任何一种文件字节流的...

weixin_29649815的博客 2364

AstrBot插件开发全攻略:从零编写一个天气查询插件(Python实战)

本文提供了一份详细的AstrBot插件开发实战指南,手把手教你使用Python从零编写一个智能天气查询插件。内容涵盖插件系统核心设计、开发环境搭建、API调用与数据处理、自然语言交互实现以及插件打包发布全流程,帮助你快速掌握基于AstrBot框架的聊天机器人功能扩展技能。

weixin_29212867的博客 1084

selenium绕过检测,规避检测

现在不少大网站有对selenium采取了监测机制。比如正常情况下我们用浏览器访问淘宝等网站的 window.navigator.webdriver的值为 undefined或者为false。而使用selenium访问则该值为true。那么如何解决这个问题呢?我们正常浏览器登录查看,window.navigator.webdriver的值为false我们通过selenium打开的网页,测试,可见window.navigator.webdriver的值为true。

景天科技苑 1万+

XML基础介绍

说起XML,大家都会想起HTML,连接中是我HTML的简单总结,这篇我将重点总结一下XML的基础知识。            首先:HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言。                                  而XML(Extensible Markup Language),是

学会改变自己——才能突破 1万+

使用 Python 爬取 Wikipedia 数据:抓取百科条目及其内容

维基百科的 API 提供了一些方便的接口,通过这些接口,我们可以轻松获取到维基百科的条目、类别、图片和其他相关信息。维基百科的 API 主要是基于 HTTP 请求的,通过向特定的 URL 发送 GET 请求来获取信息。:获取指定条目的内容。在本博客中,我们介绍了如何使用 Python 爬取维基百科的条目数据。通过使用 Wikipedia API 和网页抓取技术,我们能够高效地获取条目内容,并将其存储和分析。希望本篇教程能帮助你深入理解如何抓取和处理维基百科的数据。

2201_76125261的博客 475

XML 基础介绍

XML 是独立于软件和硬件的信息传输工具,这篇博客是对 XML 的基本介绍

Lyrelion的博客 2565

python+playwright 学习-10.pytest-playwright插件编写测试用例

pytest-playwright插件完美的继承了pytest 用例框架和playwright基础使用的封装,基本能满足工作中的常规需求了,不需要我们再做额外的插件开发。

qq_27371025的博客 2516

错误代码:11300001 数据集 [xxx] 配置错误“=”附近有语法错误(原理分析)

错误代码:11300001 数据集 [1_Workshift] 配置错误“=”附近有语法错误。

码农研究僧的博客 915

XML基础速成

文章目录一、XML简介二、XML语法2.1 标记2.2 元素2.3 属性三、XML元素之间的关系四、XML名称命名规则4.1 XML实体应用4.2 XML CDATA区4.3 XML注释4.4 XML声明4.5 格式正确的XML文档。4.6 XML命名空间4.7 DTD和XML Schema 一、XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据。 XML文档以.xml为后缀。需要彻底注意的是XML是区分大小写的。 先从一个简单的XML例子来了解下xml基础: &lt

craftsman2020的博客 570

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

XML外部实体注入--XML基础

XML 即可扩展标记语言(Extensible Markup Language),用于标记电子文件,使其具有结构性。它是一种允许用户对自己的标记语言进行定义的源语言,可用来标记数据、定义数据类型。

qq_37107430的博客 1634

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

xml基础

本文主要是学习XML 的笔记!

墨城烟柳ベ旧人殇的博客 3764

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

XML基础学习

DTD是用来规范XML文档格式,既可以用来说明哪些元素/属性是合法的以及元素间应当怎样嵌套/结合,也用来将一些特殊字符和可复用代码段自定义为实体DTD可以嵌入XML文档当中(内部声明),也可以以单独的文件存放(外部引用)

2201_75857869的博客 752

Java 基础之读写XML

记录一下Jave中读写XML的基础使用方法,本文描述了在java中加载xml,读取xml节点和属性数据,修改节点和属性数据,将修改保存到文件等方法。并提供了多种方式,包括DOM、DOM4J等。

QIFU的专栏 1523

XML的基础知识

XML的基础知识一、什么是XML?二、XML的树结构1.XML文档的基本结构2.XML文档实例3.书店的XML表示示例三、XML的语法1.XML的语法规则2.XML的实体引用 一、什么是XML? XML 指可扩展标记语言(EXtensible Markup Language); XML 是一种标记语言,很类似 HTML; XML 的设计宗旨是传输数据,而非显示数据; XML 标签没有被预定义,需...

weixin_43951995的博客 943

XML基础入门

1.概念 1.概念:XML(extensible markup language)可扩展标记语言 可扩展:标签都是自己定义的 作用: 存储数据: 1.配置文件 2.在网络中传输 xml与html的区别: xml的标签都是自定义的,html标签都是预定义的 xml的作用是存储数据,html的作用是展示数据 ...

qq_36450449的博客 370

JavaEE基础之- xml

xml文档约束是用另一个文件来约束xml文档的结构,例如要求xml文档的根元素必须是 <students> ,在 <students> 元素下可以包含0~n个 <student> 元素,每个 <student> 元素必须有一个number属性,而且还要有三个子元素,分别为<name>、<age>、<sex>,这三个子元素的内容必须为文本内容,而不能是子元素。一个应用程序如果需要DOM或SAX来访问XML文档,还需要一个实现了DOM或SAX的解析器,也就是说这个解析器需要实现DOM或SAX中定义的接口。

m0_75163045的博客 1439

XML学习之基础

XML基础 XML被设计用来传输和存储数据。 XML指可扩展标记语言 XML是一种标记语言,类似HTML XML的设计宗旨是传输数据,而非显示数据 XML标签没有被预定义。需要自行定义标签 XML被设计为具有自我描述性。 XML树结构 XML文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。 <?xml version="1.0" encoding="utf-8"?> <note> <to>George</to> <from>John

weixin_43216479的博客 184

XML 基础

文章目录一、XML文档规则1、文档声明2、标签(元素)定义3、标签属性4、xml注释5、实体与CDATA标记6、命名空间二、XPath1、XPath节点2、基本概念3、基础语法4、运算符和函数三、XML约束1、DTD简介2、 schema(xsd)简介四、XML的解析1、JAXP2、SAX解析XML3、Dom4j解析XML xml(Extensive Markup Language 可扩展标记语言...

qq_35976650的博客 1515
上一篇: JavaScript in Browser
下一篇: Web Application API
lifeNet
博客等级 码龄20年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值