用XMLSpy编辑与约束XML文件操作
一、XML文件介绍
可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。
XML文件格式是纯文本格式,在许多方面类似于HTML,XML由XML元素组成,每个XML元素包括一个开始标记(<title>),一个结束标记(</title>)以及两个标记之间的内容,例如,可以将XML元素标记为价格、订单编号或名称。标记是对文档存储格式和逻辑结构的描述。在形式上,标记中可能包括注释、引用、字符数据段、起始标记、结束标记、空元素、文档类型声明( DTD)和序言。
XML文件的作用是可以定义数据交流的标准或系统配置参数,有一段时间预测是可以替代HTML的标签语言,但是后来发展不理想,没有成为HTML网页的替代方案。但是XML文件在数据交流中还是非常有用的,尤其是在进行数据交流标准的定义中,不同用户按事先约定好的XML标签格式传递数据,双方就可以交流数据。其规范性要强于json文件格式
具体规则如下:
1、必须有声明语句。
XML声明是XML文档的第一句,其格式如下:
<?xml version="1.0" encoding="utf-8"?>
2、注意大小写
在XML文档中,大小写是有区别的。"<P>"和"<p>"是不同的标记。注意在写元素时,前后标记的大小写要保持一致。
3、XML文档有且只有一个根元素
XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。例如
<?xml version="1.0" encoding="utf-8"?>
<data>
XXXXXX
</data>
4、属性值使用引号
在HTML代码里面,属性值可以加引号,也可以不加。但是XML规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。
<?xml version="1.0" encoding="utf-8"?>
<data name="school_data">
XXXXXX
</data>
5、所有的标记必须有相应的结束标记
在HTML中,标记可以不成对出现,而在XML中,所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误。
<?xml version="1.0" encoding="utf-8"?>
<data name=”school_data”>
<school name=”ncist”>
<myclass name="计算机B191">
<student id="001">
<realname>张一</realname>
<sex>男</sex>
<age>21</age>
</student>
</myclass>
</school>
<school name=”pku”>
<myclass name="物联网B191">
<student id="001">
<realname>王一</realname>
<sex>女</sex>
<age>19</age>
</student>
</myclass>
</school>
</data>
6、所有的空标记也必须被关闭
空标记是指标记对之间没有内容的标记,比如"<img></img>"等标记。在XML中,规定所有的标记必须有结束标记。
二、XMLSpy软件介绍
XMLSpy 是来自Altova的一款方便实用,功能强大的XML(标准通用标记语言的子集)编辑器。软件支持WYSWYG,支持Unicode、多字符集,支持Well-formed和Validated两种类型的XML文档,支持NewsML等多种标准XML文档的编辑,软件在原来的基础上增加了几个很有用的功能,会让XML代码的处理更容易,是J2EE,.NET和数据库开发人员不可缺少的高性能的开发工具。网上搜索需要的版本安装就可以了。
XMLSpy 软件界面
XMLSpy 编辑界面
三、利用XMLSpy软件编辑XML文件
1、建立一个XML样例文件
首先利用任意文本编辑器,建立一个普通的XML文件,里面含有基本的XML数据结构。
<?xml version="1.0" encoding="UTF-8" ?>
<data>
<school name="ncist001">
<myclass name="计算机001">
<student id="001">
<realname>张一</realname>
<sex>男</sex>
<age>21</age>
</student>
</myclass>
</school>
</data>
2、利用XMLSpy软件生成约束文件
利用XMLSpy软件打开此文件,分析生成约束XSD文件。这步很关键。会提示是否应用约束等,基本都是默认确认就可以了。软件自动在XML文件中建立约束的语句。这种方法可以快速生成约束文件,在此基础上进行修改,能够快速完成约束文件的生成。
带有约束的XML文件
生成约束文件
xsd约束文件
3、修改约束文件xsd
软件自动生成了约束文件xsd,但是这个约束文件有问题。主要是它采用扁平化方法,描述各个元素的层级关系。所谓扁平化描述,就是指描述本层和它所包含的下一层的元素。
注意点:
1 data是根目录,它只描述的data的类型,和含有的下一级子元素。具体下一级子元素的详细描述,又采用扁平化方法在下面描述了
2 在描述中,元素的属性数据类型都进行了约束,问题在于后面采用枚举,限定的数据内容,因此需要把枚举的内容删除掉。
3 在元素的描述中,没有限定数据数量,默认就是1个。应该添加不限定。方法是自己写,或者在添加一个元素,然后再生成约束文件,分析文件就可以了。
xsd约束文件
4、XML可视化
XMLSpy软件提供了一种可视化结构展示,非常方便查看自己的XML约束条件。
xml可视化
5、约束文件地址修改
XML文件中引用的约束文件为绝对地址,不适合发布使用。把它修改为相对地址,xml和xsd文件在同一个文件夹中。
xsd地址
6、约束检查
XML约束检查,如果是用XMLSpy软件,如果有问题,会报错,不让保存。根据提示错误,可以修改xsd文件或者XML文件
约束检查结果
四、pycharm软件中生成约束xsd文件
利用pycharm也可以生成XSD文件,但是文件的描述感觉没有XMLSpy软件描述的清晰,如下图,不适用。Pycharm不能进行XML规则检查。
pycharm编辑xml
xml文件
五、Python读写XML文件
常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。
Python 有三种方法解析 XML,就是SAX,DOM,以及 ElementTree。
1.SAX (simple API for XML )
Python 标准库包含 SAX 解析器,SAX 用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
2.DOM(Document Object Model)
将 XML 数据在内存中解析成一个树,通过对树的操作来操作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
代码如下:
DEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。
官方网址:http://www.jetbrains.com/idea/
idea-1
idea-2
Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。
官方网址:https://code.visualstudio.com/
vs
Java Decompiler是个反编译的工具,可以将编译过的CLASS文件编译还原成为Java原始文件,并且不需要额外安装JVM(Java Virtual Machine)或是Java SDK的工具模组即可使用。
官方网址:http://jd.benow.ca/
Java Decompiler
Telerik justdecompile是一款免费的.NET反编译工具,这款软件可以用来分析已经加载的程序集或者外部引用的程序集的全部类型。可以反编译lambda表达式、泛型、yield语句和自动属性。JustDecompile与Reflector相比的话,个人更喜欢JustDecompile,因为他免费,而且对于一些C#动态类型的反编译效果比较好。
官方网址:http://www.telerik.com/products/decompiler.aspx
Telerik justdecompile
Typora是一个功能强大的Markdown编辑器,使用GFM风格(即大名鼎鼎的github flavored markdown),Typora目前支持Mac OS和Windows,Linux版本尚未发布。Typora可以插入数学表达式,插入表情,表格,支持标准的Markdown语法,可以使用标注....,功能强悍!!!还可以导出PDF文件和HTLM文件。实时预览!!!非常牛逼!
官方网址:https://www.typora.io/
Typora
Memcached(win系统下Memcache服务工具):Memcached官方版是一个高性能分布式内存对象缓存系统,该程序可用于动态Web应用以减轻数据库负载,可以通过在内存中缓存数据来减少读取数据库的次数,从而能够提供动态数据库驱动网站的速度。Memcached官方版是基于一个存储键值对的hashmap,守护进程(daemon)是用C写的,客户端可以用任何语言来编写并通过memcached协议与守护进程通信。
官方网址:http://memcached.org/
Memcached
一款完全图形化的MYSQL数据库管理软件Webyog SQLyog Ultimate,通过互联网你能够在任何地方远程管理你的MYSQL数据库。SQLyog是一个易于使用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库!支持HTTP/HTTPS/SSH安全通道,能够批量导入各种类型的数据,速度极快的SQL脚本执行速度,完全智能化的SQL自动完成语句,支持使用SSL加密隧道,使用客户端认证加密.
官方网址:https://www.webyog.com/product/downloads
SQLYog
Git客户端Agit支持git、http、https,也支持github的ssh,支持离线查看。
官方网址:https://git-for-windows.github.io/
git
Altova XMLSpy是一款专业的xml开发工具,是一个用来查看,验证和编辑XML文档的入门级XML编辑器.它是需要查看XML,DTD,XML架构,XSLT和XQuery文件和执行低级别编辑任务的用户的理想工具.RaptorXML 和XPath 3.0等支持,是XML开发人员等必备的一款开发利器。
官方网址:https://www.altova.com/xmlspy.html
Altova XMLSpy
欢迎大家互相推荐补充,互相学习哦。
thanks
XML名为可扩展标记语言,与HTML结构类似。
用于结构化存储、传输数据。
例子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resource PUBLIC "namespace" "namespace.dtd">
<resource xmlns="https://www.serendipity.com">
<table id="001">
<td>apple</td>
<td>pear</td>
</table>
</resource>
<?xml version="1.0" encoding="UTF-8"?>
< == <
> == >
& == &
' == &pos;
" == "
属性用来描述元素的额外信息,而不同于描述数据信息,数据信息建议使用标签描述。
XML DTD和 XML Schema是用于验证、约束XML的,XML Schema是XML DTD的替代方案。
<!DOCTYPE resource
[
<!ELEMENT resource (table)>
<!ELEMENT table (td)>
<!ELEMENT td (#PCDATA)>
]>
XSLT用于替换XML数据并转化为另一种格式的XML或者HTML。Linux和Mac上可以使用xsltproc工具执行转化,windows可以使用XMLSpy软件。
-bash-3.2$ xsltproc namespace.xsl namespace.xml
<html><body>
apple
pear
</body></html>
用于提取服务器端的XML文件并解析成XML DOM对象,如下示例:
<!DOCTYPE html>
<html>
<body>
<h1>namespace</h1>
<div id="main">
</div>
<script>
xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","namespace.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById("main").innerHTML=
xmlDoc.getElementsByTagName("td")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
用来避免元素命名冲突,当相同元素有不同的结构时,可以区分开来,。比如示例table元素:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resource PUBLIC "namespace" "namespace.dtd">
<resource xmlns="https://www.serendipity.com" xmlns:d="https://www.serendipity01.com">
<table id="001">
<td>apple</td>
<td>pear</td>
</table>
<d:table>
<d:name>desk</d:name>
<d:width>150cm</d:width>
<d:height>80cm</d:height>
</d:table>
</resource>
XSLT提取原XML文件到新的XML文件时,需要指定原XML的命令空间,否则XSLT将提取不到节点的数据。
使用CDATA包含的数据不被XML解析器解析。
@真知新坐标
*请认真填写需求信息,我们会在24小时内与您取得联系。