什么是xml?
xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
abc.xml
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
Ok ,从结构上,它很像我们常见的HTML超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输和存储数据,其焦点是数据的内容。
那么它有如下特征:
首先,它是有标签对组成,<aa></aa>
标签可以有属性:<aa id=’123’></aa>
标签对可以嵌入数据:<aa>abc</aa>
标签可以嵌入子标签(具有层级关系):
<aa>
<bb></bb>
</aa>
获得标签属性
那么,下面来介绍如何用python来读取这种类型的文件。
#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
print root.nodeName
print root.nodeValue
print root.nodeType
print root.ELEMENT_NODE
mxl.dom.minidom 模块被用来处理xml文件,所以要先引入。
xml.dom.minidom.parse() 用于打开一个xml文件,并将这个文件对象dom变量。
documentElement 用于得到dom对象的文档元素,并把获得的对象给root
每一个结点都有它的nodeName,nodeValue,nodeType属性。
nodeName为结点名字。
nodeValue是结点的值,只对文本结点有效。
nodeType是结点的类型。catalog是ELEMENT_NODE类型
现在有以下几种:
'ATTRIBUTE_NODE'
'CDATA_SECTION_NODE'
'COMMENT_NODE'
'DOCUMENT_FRAGMENT_NODE'
'DOCUMENT_NODE'
'DOCUMENT_TYPE_NODE'
'ELEMENT_NODE'
'ENTITY_NODE'
'ENTITY_REFERENCE_NODE'
'NOTATION_NODE'
'PROCESSING_INSTRUCTION_NODE'
'TEXT_NODE'
NodeTypes - 有名常数
http://www.w3school.com.cn/xmldom/dom_nodetype.asp
获得子标签
现在要获得catalog的子标签以的标签name
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
对于知道元素名字的子元素,可以使用getElementsByTagName方法获取:
#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
bb = root.getElementsByTagName('maxid')
b= bb[0]
print b.nodeName
bb = root.getElementsByTagName('login')
b= bb[0]
print b.nodeName
如何区分相同标签名字的标签:
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
<caption>和<item>标签不止一个如何区分?
#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
bb = root.getElementsByTagName('caption')
b= bb[2]
print b.nodeName
bb = root.getElementsByTagName('item')
b= bb[1]
print b.nodeName
root.getElementsByTagName('caption') 获得的是标签为caption 一组标签,b[0]表示一组标签中的第一个;b[2] ,表示这一组标签中的第三个。
获得标签属性值
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
<login>和<item>标签是有属性的,如何获得他们的属性?
#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
itemlist = root.getElementsByTagName('login')
item = itemlist[0]
un=item.getAttribute("username")
print un
pd=item.getAttribute("passwd")
print pd
ii = root.getElementsByTagName('item')
i1 = ii[0]
i=i1.getAttribute("id")
print i
i2 = ii[1]
i=i2.getAttribute("id")
print i
getAttribute方法可以获得元素的属性所对应的值。
获得标签对之间的数据
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<maxid>4</maxid>
<login username="pytest" passwd='123456'>
<caption>Python</caption>
<item id="4">
<caption>测试</caption>
</item>
</login>
<item id="2">
<caption>Zope</caption>
</item>
</catalog>
<caption>标签对之间是有数据的,如何获得这些数据?
获得标签对之间的数据有多种方法,
方法一
#coding=utf-8
import xml.dom.minidom
#打开xml文档
dom = xml.dom.minidom.parse('abc.xml')
#得到文档元素对象
root = dom.documentElement
cc=dom.getElementsByTagName('caption')
c1=cc[0]
print c1.firstChild.data
c2=cc[1]
print c2.firstChild.data
c3=cc[2]
print c3.firstChild.data
firstChild 属性返回被选节点的第一个子节点,.data表示获取该节点人数据。
方法二
#coding=utf-8
from xml.etree import ElementTree as ET
per=ET.parse('abc.xml')
p=per.findall('./login/item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text
p=per.findall('./item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text
方法二有点复杂,所引用模块也与前面的不一样,findall用于指定在哪一级标签下开始遍历。
getchildren方法按照文档顺序返回所有子标签。并输出标签名(child.tag)和标签的数据(child.text)
其实,方法二的作用不在于此,它核心功能是可以遍历某一级标签下的所有子标签。
相关推荐
python 读xml并提取相关信息,python 读xml文件并提取相关信息
在Python中,我们可以使用内置的`xml`模块来处理XML文件,特别是`xml.etree.ElementTree`子模块,它提供了方便的API来解析和操作XML文档。首先,我们需要导入`ElementTree`模块: ```python import xml.etree....
### 读XML文件 在`read_xml.py`中,我们将学习如何读取和解析XML文件。以下是一个基本的读取示例: ```python import xml.etree.ElementTree as ET # 解析XML文件 tree = ET.parse("input.xml") root = tree.get...
首先,Python提供了两个内置库用于XML处理:`xml.dom.minidom` 和 `ElementTree`。其中,`ElementTree` 是更常用且效率更高的选择,它提供了简单易用的API来解析和操作XML文档。 1. **安装与导入** 在Python中,`...
Python作为一门强大的编程语言,因其简洁易读的语法特性、丰富的第三方库支持以及广泛的应用场景而备受青睐。XML(Extensible Markup Language)则是一种用于标记数据的标准格式,旨在传输和存储结构化的数据。将这...
Requests是Python中的一个HTTP库,它允许开发者以人类可读的方式发送HTTP请求。这个库支持GET、POST、PUT、DELETE等多种HTTP方法,并且可以处理cookies、文件上传、HTTP认证等功能,极大地简化了网络请求的处理过程...
Python是一种广泛使用的高级编程语言,因其简洁易读、功能强大而受到开发者青睐。而XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,以其强大的数据描述能力和平台无关性而广泛应用于网络数据交换中。 ...
ElementTree同样提供了一种边读边解析的方式,即通过iterparse方法,可以逐个处理XML文档的节点而不必一次性加载整个文档到内存。此外,ElementTree的性能与SAX相媲美,同时其API的使用体验要更方便。 在具体实现上...
本文将详细介绍如何使用Python读取文本文件(包括`.txt`和`.log`)、XML文件(`.xml`)以及Excel文件(`.xlsx`)。这些方法对于数据分析、自动化脚本编写等场景非常有用。 #### 1. 读取文本文件数据(`.txt` 结尾的...
XML乐谱解析是一种将音乐符号数据转换为计算机可读格式的过程,主要应用于音乐软件和教育领域。本项目采用Python编程语言实现,旨在提取XML乐谱文件中的关键元素,如单词、音高、时长,并提供了配置选项来处理元音和...
Python是一种强大的、易读性强且用途广泛的编程语言,它的设计理念是简单、优雅和趣味性,以英国喜剧团体Monty Python为灵感命名。Python的语法直观,对于错误处理提供了即时反馈,使得它成为初学者入门的理想选择。...
而且直接读小文件,性能比查询数据库应该更好,下面一个例子,如何用python解析xml数据,xml数据是省份,城市 数据,内容如下: <?xml version=1.0 encoding=utf-8 ?> 直辖市> 北京> <city name=上海
本资源“python后处理详解:手把手教你用python读数据,python读入数据,Python源码.zip”旨在帮助初学者和进阶者深入理解如何使用Python进行数据的读取和后处理操作。下面,我们将详细探讨这一主题。 首先,Python中...
1. 加载XML文件:使用特定库(如Python的xml.etree.ElementTree或Java的DOM API)加载XML文件到内存。 2. 解析XML:通过解析器解析XML文件,生成元素树或节点结构。 3. 遍历和提取数据:根据元素结构遍历树,查找并...
综上所述,这个名为"txt2xml.py"的Python脚本提供了从TXT到XML的转换功能,涉及到了文件操作、字符串解析、XML生成等多个Python编程的基础和进阶知识点。对于进行NLP研究或开发的人来说,掌握这些技能是非常有价值的...
XML虽然比JSON复杂,在Web中应用也不如以前多了,...在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了。 举个例子,当SAX解析
在Python编程语言中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它以其简洁、易读性而受到广泛欢迎。JSON格式与Python的字典和列表结构有天然的对应关系,因此Python提供了内置的`json`模块来...
### Python自定义解析简单XML格式文件的方法 #### 概述 在进行Web开发或处理不同系统间的数据交换时,XML(可扩展标记语言)是一种常用的数据格式。它以标签的形式组织数据,使得数据结构清晰易读。Python 提供了...