python基础之读取xml

摘要:
然而,超文本语言是为显示数据而设计的,它的重点是数据的外观。Xml设计用于传输和存储数据,其重点是数据的内容。功能:1.标签对组合:2.标签可以具有属性3.标签可以嵌入数据:CPU4.标签可以嵌入子标签Python以读取xmlintxml.dom。minidom并打开xml文件:xml.dom。minidom Parse()每个节点都有nodeName、nodeValue和nodeType。NodeName是节点的名称,nodeValue是节点的值,仅对文本节点有效。目录为ELEMENT_NODE类型如下:'ATTRIBUTE_NODE''CDATA_SECTION_NODE''COMMENT_NODE''DOCUMENT_FRAGMENT_NODE'DOCUMENT_NODE''DOCUMENT_TYPE_NODE''ELEMENT_NODE''ENTITY_ NODE''ENTITY.NODE'ENTITY_REFERENCE_NODE''NOTATION_NODE''PROCESSING_ INSTRUCTION_NODE''TEXT_ NODE'例如,有这样一个xml:abc xml4PythontestZope//Catalog˃ViewCode读取根节点:fromxml.dom。minidomimportparsedefread_xml_root_node:dom=parseroot=dom。documentElementreturnrootif__name__==“__main__”:root_node=read_xml_root_NodeprintprintViewCode输出结果:为什么catalog1打印出类型为1?1代表什么。

python怎么操作xml文件详细介绍链接:https://www.jb51.net/article/50812.htm

从结构上来说,xml很像常见的HTML超文本标记语言。不过超文本语言被设计用来显示数据,其焦点是数据的外观。xml被设计用来传输和存储数据,其焦点是数据的内容。

特征:

1. 标签对组成:<TEST></TEST>

2. 标签可以有属性<TEST Loop="1"></TEST>

3. 标签可以嵌入数据:<TEST>CPU</TEST>

4. 标签可以嵌入子标签(具有层级关系)

Python读取xml

import xml.dom.minidom

打开xml文件:xml.dom.minidom.parse()

每个节点都有nodeName, nodeValue, nodeType,nodeName为节点名字,nodeValue是节点的值,只对文本节点有效。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'

举个例子,有这样一份xml:

abc.xml

python基础之读取xml第1张python基础之读取xml第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>
View Code

读取根节点:

python基础之读取xml第1张python基础之读取xml第4张
from xml.dom.minidom import parse


def read_xml_root_node(xml_path):
    dom = parse(xml_path)
    root = dom.documentElement
    return root


if __name__ == "__main__":
    root_node = read_xml_root_node("abc.xml")
    print(root_node.nodeName)
    print(root_node.nodeType)
View Code

输出结果:

catalog
1

为什么打印出来的类型是1呢,1代表什么呢。参考nodeType

获取子节点以及value:

python基础之读取xml第1张python基础之读取xml第6张
from xml.dom.minidom import parse


def read_xml_root_node(xml_path):
    dom = parse(xml_path)
    root = dom.documentElement
    return root


def read_child_label(node, label_name):
    child = node.getElementsByTagName(label_name)
    return child


if __name__ == "__main__":
    root_node = read_xml_root_node("abc.xml")
    print(root_node.nodeName)
    print(root_node.nodeType)
    child_nodes = read_child_label(root_node, "maxid")
    for child_node in child_nodes:
        print(child_node.nodeName)
        print(child_node.nodeType)
        print(child_node.childNodes[0].nodeValue)
View Code

输出结果:

catalog
1
maxid
1
4

获取标签属性

python基础之读取xml第1张python基础之读取xml第8张
from xml.dom.minidom import parse


def read_xml_root_node(xml_path):
    dom = parse(xml_path)
    root = dom.documentElement
    return root


def read_child_label(node, label_name):
    child = node.getElementsByTagName(label_name)
    return child


def read_attribute(node, attr_name):
    attribute = node.getAttribute(attr_name)
    return attribute


if __name__ == "__main__":
    root_node = read_xml_root_node("abc.xml")
    print(root_node.nodeName)
    print(root_node.nodeType)
    child_nodes_login = read_child_label(root_node, "login")
    for child_node in child_nodes_login:
        attr_username = read_attribute(child_node, "username")
        print(attr_username)
View Code

输出结果:

catalog
1
pytest

另一种模块读取xml的方法,可以遍历指定标签下的子标签

python基础之读取xml第1张python基础之读取xml第10张
from xml.etree import ElementTree as ET


per = ET.parse("abc.xml")
p = per.findall("./login/item")

for opener in p:
    for child in opener.getchildren():
        print(child.tag, ":", child.text)


p = per.findall("./item")

for oneper in p:
    for child in oneper.getchildren():
        print(child.tag, ":", child.text)
View Code

输出结果:

caption : 测试
caption : Zope

免责声明:文章转载自《python基础之读取xml》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ASP.NET Web应用程序修改页面Inherits示例5种方法去掉HTML中Inline-Block元素之间的空白下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

supervisor的command执行两条命令

如下supervisor的进程的comand配置参数只能写一个命令 1、要执行多条命令,可以写个sh文件包含多条命令,然后sh -x xxxx.sh,但这样又多了一个文件, 2、把所有命令放在字符串,然后用eval来执行,这样在shell窗口可以执行,但放在supervisor报找不到eval命令。比如: command = eval "python -u...

Android学习笔记六:六大布局

六大界面布局方式包括:线性布局(LinearLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、相对布局(RelativeLayout)、绝对布局(AbsoluteLayout)和网格布局(GridLayout)。 1. LinearLayout线性布局 LinearLayout容器中的组件一个挨一个排列,通过控制and...

C# XELEMENT 解析xml文件(字符串)

XElement 解析xml字符串,或者xml文件方法 xml文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <Request> 3 <Header> 4 <SourceSystem>02</SourceSystem> 5 <...

python基础整理5——多进程多线程和协程

进程与线程 1.进程 我们电脑的应用程序,都是进程,假设我们用的电脑是单核的,cpu同时只能执行一个进程。当程序处于I/O阻塞的时候,CPU如果和程序一起等待,那就太浪费了,cpu会去执行其他的程序,此时就涉及到切换,切换前要保存上一个程序运行的状态,才能恢复,所以就需要有个东西来记录这个东西,就可以引出进程的概念了。 进程就是一个程序在一个数据集上的一次...

Delphi指针的用法

DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此不论。其实,Pascal语言本身也是支持指针的。从最初的Pascal发展至今的Object Pascal,可以说在指针运用...

Python基础汇总001_txt文件读写、字典使用等

1.利用python读取文件 (1)Python引入了with语句来自动帮我们调用close()方法 <1>读取指定路径下的文件 with open('/path/to/file', 'r') as f: print(f.read()) <2>写文件 with open('/Users/michael/test.txt',...