c语言检验xml文档是否正确_Python:使用XML

python 使用ElementTree解析xml:1.解析 2.遍历(可以通过下标的方式直接访问节点3.修改xml结构(添加子元素) 4.创建xml文档

可扩展标记语言(XML)文档是一种简单而灵活的文本格式,用于在Web和其他地方交换各种数据。XML文档是Web上数据的通用格式。XML允许开发人员以标准、一致的方式轻松地描述和交付来自任何应用程序的丰富、结构化数据。XML文档的扩展名为.XML。

XML几个优点:

  1. 重用-内容与表示分离,这使文档的快速创建和内容重用成为可能。
  2. 可移植性——XML是一种基于ASCII文本的独立于平台的国际标准,因此开发人员可以安全地将文档存储在XML中,而不必与任何一家供应商绑定。
  3. 交换——XML是一个核心数据标准,它使支持XML的应用程序能够无缝地互操作和共享数据。
  4. 自我描述——XML是一种人类可读的格式,用户可以很容易地查看和理解。

元素构成XML文档的主干,创建可以用程序操作的结构。元素标识内容的各个部分,并使用标识元素的名称、开始和结束的标记来构建。所有元素都必须有名称。元素名称区分大小写,必须以字母或下划线开头。元素名可以包含字母、数字、连字符、下划线和句点。元素通常包括开始和结束标记,以及两者之间的所有内容。

元素提供了一种方式来指示XML中每个内容部分属于哪个元素,这是通过标记实现的。标记在内容周围建立边界。标记由左尖括号(<)和右尖括号(>)之间的元素名组成。标记用于标识特定元素的开始位置和结束位置。开始标记通常看起来像名为element_name的元素。此元素对应的结束标记是。XML语言中没有预定义的标记。XML文档中的标记不是任何XML标准的一部分。这些标记是由编写XML文档的开发人员考虑的。

元素还可以包含属性,这些属性具有名称和值,用于提供有关内容的其他信息。元素的属性写入该元素的开始标记中,并采用 attribute_name=“attribute_value”格式。XML中的属性值必须用单引号双引号括起来。双引号是传统的。当属性值包含双引号时,单引号很有用。

创建XML文档时必须遵循以下语法规则:

1:所有XML元素都必须有结束标记。创建XML语法时省略结束标记是非法的。XML元素必须有结束标记。

Incorrect:
<movie>Maze Runner.
Correct:
<movie>Maze Runner. </movie>

2:当您创建XML文档时,XML标记是区分大小写的,标记与标记不同。

Incorrect:
<Google>An Alphabet Company. </google>
Correct:
<google>An Alphabet Company. </google>

3:所有XML元素都必须正确嵌套。不正确的标记嵌套对XML没有意义。这里<country> and <state> 是兄弟元素。

Incorrect:
<country><state>Alaska is the biggest state in USA </country></state>
Correct:
<country><state>Alaska is the biggest state in USA </state></country>

4:所有XML文档都必须有根元素。所有XML文档都必须包含一个标记对才能定义根元素。所有其他元素都必须在此根元素中。家庭隐喻,如父母、孩子和兄弟姐妹,用来描述元素之间的相互关系。所有元素都可以有子元素。子元素必须正确嵌套在其父元素中。例如,

<root>
 <child>
  <subchild>.....</ subchild>
 </ child>
</root>

5:必须始终引用属性值。在属性值周围省略引号是非法的。

Incorrect:
<thor realm=Asgard> God of Thunder </thor>
Correct:
<thor realm="A s g a r d"> God of Thunder </thor>

6: 用XML编写注释。使用以下语法以XML编写注释:

<!-- This is a comment -->

例子

程序1:构造一个XML格式的数据并编写Python程序来解析该XML数据

1. import xml.etree.ElementTree as ET
  2. def main():
  3.  university_data = '''
  4.  <top_universities>
  5.   <year_2018>
  6.    <university_name location=" USA">MIT</university_name>
  7.    <ranking>First</ ranking>
  8.   </year_2018>
  9.   <year_2018>
 10.    <university_name location="UK">Oxford</university_name>
 11.    <ranking>Sixth</ ranking>
 12.   </year_2018>
 13.   <year_2018>
 14.    <university_name location="Singapore">NTU</university_name>
 15.    <ranking>Eleventh</ ranking>
 16.   </year_2018>
 17.  </top_universities>
 18.      '''
 19.  root = ET.fromstring(university_data)
 20.  for ranking_year in root.findall('year_2018'):
 21.   university_name = ranking_year.find('university_name').text #查找带有特定标记'university_name'的第一个子元素,并访问元素的文本内容
 22.   ranking = ranking_year.find('ranking').text
 23.   location = ranking_year.find('university_name').get('location') 
 24.    print(f"{university_name} University has secured {ranking} Worldwide 
 ranking and is located in {location}")
 25. if __name__ == "__main__":
 26.  main()

output

MIT University has secured First Worldwide ranking and is located in USA
Oxford University has secured Sixth Worldwide ranking and is located in UK
NTU University has secured Eleventh Worldwide ranking and is located in Singapore

ElementTree(简称ET)模块实现了一种简单有效的解析和创建xml数据的方法。XML是一种固有的分层数据格式,最自然的表示方法是使用树。您需要获取根元素,以便轻松地遍历树。

您可以直接从字符串中读取XML数据,

root = ET.fromstring(university_data)

fromstring() 函数的作用是:将XML数据从字符串直接解析为元素,元素是解析树的根元素。
您也可以通过从文件读取XML数据来导入它。例如,如果XML数据存储在名为university_data.XML的文件中,则要读取XML文件,请用下面两行替换代码。

tree = ET.parse('university_data.xml') 
root = tree.getroot()

ET具有ElementTree 类,以树表示整个XML文档。 Element.findall()仅查找带有标签的元素,这些元素是当前元素的直接子元素,并以list的形式返回所有子元素。 Element.find()查找带有特定标记的第一个子元素。 Element.text访问元素的文本内容。Element.get()访问元素的属性attributes 。

程序2:编写Python程序以生成XML格式的数据并将其另存为XML文档

  1. import xml.etree.ElementTree as ET
  2. def main():
  3.  root = ET.Element("catalog")
  4.  child = ET.SubElement(root, "book", {"id":"bk101"})
  5.  subchild_1 = ET.SubElement(child, "author")
  6.  subchild_2 = ET.SubElement(child, "title")
  7.  subchild_1.text = "Michael Connelly"
  8.  subchild_2.text = "City of Bones"
  9.  child = ET.SubElement(root, "book", {"id":"bk102"})
 10.  subchild_1 = ET.SubElement(child, "author")
 11.  subchild_2 = ET.SubElement(child, "title")
 12.  subchild_1.text = "Jeffrey Friedl"
 13.  subchild_2.text = "Mastering Regular Expressions"
 14.  tree = ET.ElementTree(root)
 15.  tree.write("books.xml")
 16. if __name__ == "__main__":
 17.   main ( )

output

aa8899caff9faf1304d83a8fe8e8a3ac.png

要构建XML文档,首先,您需要创建一个充当根元素的元素。创建根元素之后,可以使用SubElement()方法创建其子元素。元素类表示树中的单个元素。与单个XML元素及其子元素的交互在Element级别完成。在第一行代码中,您将获得根元素root。 SubElement()方法提供了一种方便的方法来为给定元素创建子元素和子子元素。子元素是book,子子元素是"author"和"title"。可以使用Element().text将文本添加到Element对象。在代码中,subchild_1和subchild_2是Element对象,并且使用text属性将文本添加到每个这些元素中。 ElementTree提供了一种构建XML文档并将其写入文件的简单方法--ElementTree.write()方法可达到此目的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值