Python学习笔记20(Data On the Web)

知识点1:
总述

  • 随着HTTP Request/Response更容易被人们支持和接受,逐渐产生了利用这些协议在不同的程序之间传输数据的方式;
  • 因此我们需要得到一种共同认可的方式来代表数据在不同的程序之间交换传递(中途是要经过互联网的)
  • 这里有两种比较常见的使用形式,分别为XML和JSON

知识点2:
Wire Protocol(有线协议)

如图所示:
在这里插入图片描述
在图片当中,左右两侧分别是两个Programme(程序),中间是网络,三者都具有不同的Data Structure(数据结构),左侧是Dictionary,右侧是HashMap。因此在传输的过程当中,需要通过Wire Protocol来进行传输。
在这里插入图片描述
如图给出的Wire Protocol就是XML,这仅仅是一种商定的中间协议,是一种文本
过程是发送程序序列化成Wire Format,然后解序列化传送到接收程序当中。
在这里插入图片描述
这里的Wire Format采用的是JSON,两者相比较的话,XML是较老的一种形式,比较严谨,JSON是比较新的一种形式,比较简练。

知识点3:
XML(Extensible Markup Language),可扩展标记语言

  • XML的目的是帮助信息系统分享结构化的数据
  • XML的产生是从SGML的一个子集开始发展,并在逐渐的发展过程中变得具有可读性

XML具有的基本要素如图所示:
在这里插入图片描述
一般来说。attribute一般都在start tag当中;
自关闭标签,就好像在空白的文本区域有一个同名的关闭标签

知识点4:
XML的术语

  • Tags:表示元素的开始与结束
  • Attributes:在XML开始标记当中的Key-Value配对对子
  • Serialize/De-serialize:将一个程序中的数据转化为一种可被存储的通用形式,并在程序和网络之间传输

知识点5:
XML as a TREE

在这里插入图片描述如图所示是一般的XML的原理,如果带有Attribute就如下图所示:
在这里插入图片描述
Parse XML时所走的路径如下图所示:

在这里插入图片描述
知识点6:
XML 架构

  • XML 文件合法格式的描述
  • 表示为对文件结构及内容的限制
  • 是通常用于指定系统之间的“契约条款”,我的系统指接受符合此特定模式的XML
  • 如果一个特定的XML片段满足模式的规范,就称之为“验证”
    在这里插入图片描述
    从这张图中可以看出,XML Documents 和XML Schema Contract部分是相对应的,XML Schema Contract 部分做了相关验证和检查。

知识点7:
关于XSD 和 XML

XML Schema描述了XML文档的结构。可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。
一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认和固定值。
简而言之,XSD文件用来定义Xml的格式的文件,而XML是按照一定的Xsd格式生成的数据文档。
在这里插入图片描述

  • XSD 和 XML是存在对应关系的
  • xs:complexType:复杂数据类型,用来表示元素和元素的层级关系或属性关系
  • minOccurs=“1” maxOccurs=“1” 表示出现的次数
  • xs:sequence xs:choicexs:all,作用是限制子元素顺序
    sequence中定义的元素,在XML中必须按组内定义的先后顺序依次出现。
    choice中定义的元素就如同枚举一样,定义的一组元素在XML中只能任意出现一个。
    all定义的一组元素要出现就都出现,但先后顺序任意,all中的元素最多只能出现一次。

xs:enumeration
enumeration经常将某个值限定在一组可选的值之中,比如:性别要在“男”和“女”之间选择。enumeration:枚举。enumeration面可以在除boolean以后的其他类型中使用。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="sex" type="sexType"/>
	<xs:simpleType name="sexType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Male"/>
			<xs:enumeration value="FeMale"/>
		</xs:restriction>
	</xs:simpleType>
</xs:schema>
--------------------- 
作者:tuolingss 
来源:CSDN 
原文:https://blog.csdn.net/tuolingss/article/details/8529094 
版权声明:本文为博主原创文章,转载请附上博文链接!

XSD Data Types

<xs:element name="customer" type="xs:string"/>
<xs:element name="start" type="xs:date"/>
<xs:element name="startdate" type="xs:dateTime"/>
<xs:element name="prize" type="xs:decimal"/>
<xs:element name="weeks" type="xs:integer"/>

对应的XML:

<customer>John Smith</customer>
<start>2002-09-24</start>
<startdate>2002-05-30T09:30:10Z</startdate>
<prize>999.50</prize>
<weeks>30</weeks>

年份及时间的统一表示:
在这里插入图片描述
知识点8:
解析XML的实例:(相关注释直接在代码中标出)

import xml.etree.ElementTree as ET  #ET是一个别名
data = '''<person>  
  <name>Chuck</name>
  <phone type="intl">
     +1 734 303 4456
   </phone>
   <email hide="yes"/>
</person>'''  #这里使用的三一引号是为了表示多行的字符串,其中换行符是字符串的一部分

tree = ET.fromstring(data)   #这一块有可能会blow up,XML存在句法错误的时候
print('Name:',tree.find('name').text)  #tree.find('name')是找到name的tag,.text是返回文本型节点(text node),见下方详解
print('Attr:',tree.find('email').get('hide'))  #这里用.get()来获得Attribute

在这里插入图片描述

代码实例2:(这是一种有多个tag的情况)

import xml.etree.ElementTree as ET
input = '''<stuff>
    <users>
        <user x="2">
            <id>001</id>
            <name>Chuck</name>
        </user>
        <user x="7">
            <id>009</id>
            <name>Brent</name>
        </user>
    </users>
</stuff>'''

stuff = ET.fromstring(input)  #这里返回的stuff就是XML Tree
lst = stuff.findall('users/user')  #找出所有users tag下面的user tag,并以列表的形式返回,是一个由好多小树组成的列表,一个元素就是一个小树(a list of tags)
print('User count:', len(lst))
for item in lst:
    print('Name', item.find('name').text)
    print('Id', item.find('id').text)
    print('Attribute', item.get("x"))
发布了34 篇原创文章 · 获赞 5 · 访问量 6920

猜你喜欢

转载自blog.csdn.net/weixin_43593303/article/details/96589521