try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
tree = ET.parse('country.xml')
# <xml.etree.ElementTree.ElementTree object at 0x00000230D5DDF1C0>
root = tree.getroot()
# <Element 'data' at 0x0000021AE8F79540> type:<class 'xml.etree.ElementTree.Element'>
import xml.etree.ElementTree as ET
data = open("country.xml").read()
root = ET.fromstring(data) # <Element 'data' at 0x036168A0>
import xml.etree.ElementTree as ET
tree = ET.ElementTree(file="country.xml") # <xml.etree.ElementTree.ElementTree object at 0x03031390>
root = tree.getroot() # <Element 'data' at 0x030EA600>
import xml.etree.ElementTree as ET
tree = ET.parse("country.xml")
root = tree.getroot()
# 遍历xml文档的第二层
for child in root:
# 第二层节点的标签名称和属性
print(child.tag,":", child.attrib)
# 遍历xml文档的第三层
for children in child:
# 第三层节点的标签名称和属性
print(children.tag, ":", children.attrib)
类方法 | 作用 |
---|---|
Element.getchildren() | |
Element.getiterator(tag=None) | |
Element.iter(tag=None) | 遍历该Element所有后代,也可以指定tag进行遍历寻找。 |
Element.iterfind(path, namespaces=None) | 根据tag或path查找所有的后代。 |
Element.itertext() | 遍历所有后代并返回text值。 |
Element.findall(path) | 查找当前元素下tag或path能够匹配的直系节点。 |
Element.findtext(path, default=None, namespaces=None) | 寻找第一个匹配子元素,返回其text值。匹配对象可以为tag或path。 |
Element.find(path) | 查找当前元素下tag或path能够匹配的首个直系节点。 |
Element.text | 获取当前元素的text值。 |
Element.get(key, default=None) | 获取元素指定key对应的属性值,如果没有该属性,则返回default值。 |
Element.keys() | 返回元素属性名称列表 |
Element.items() | 返回(name,value)列表 |
Element.getiterator(self, tag=None) |
注意:Element.findall()或者Element.find()方法,只会从结点的直接子结点中查找,并不会递归查找。
示例:过滤出所有neighbor标签
# 过滤出所有neighbor标签
for neighbor in root.iter("neighbor"):
print(neighbor.tag, ":", neighbor.attrib)
示例:遍历所有的counry标签
# 遍历所有的counry标签
for country in root.findall("country"):
# 查找country标签下的第一个rank标签
rank = country.find("rank").text
# 获取country标签的name属性
name = country.get("name")
print(name, rank)
类成员 | 获取方法 |
---|---|
节点名(tag)(str) | Element.tag |
属性(attributes)(dict) | Element.attrib |
文本(text)(str) | Element.text |
附加文本(tail) (str) | Element.tail |
子节点列表(list) | Element[:] |
以下方法与Element类中同名方法近似,区别在于它们指定以根节点作为操作对象。
类成员 | 获取方法 |
---|---|
find(match) | |
findall(match) | |
findtext(match, default=None) | |
getroot() | 获取根节点 |
iter(tag=None) | |
iterfind(match) | |
parse(source, parser=None) | 装载xml对象,source可以为文件名或文件类型对象. |
write(file, encoding=“us-ascii”, xml_declaration=None, default_namespace=None,method=“xml”) |
函数方法 | Value |
---|---|
xml.etree.ElementTree.canonicalize(xml_data=None, *, out=None, from_file=None, **options) | |
xml.etree.ElementTree.Comment(text=None) | 创建一个特别的element,通过标准序列化使其代表了一个comment。comment可以为bytestring或unicode。 |
xml.etree.ElementTree.dump(elem) | 生成一个element tree,通过sys.stdout输出,elem可以是元素树或单个元素。这个方法最好只用于debug。 |
xml.etree.ElementTree.fromstring(text, parser=None) | text是一个包含XML数据的字符串,与XML()方法类似,返回一个Element实例。 |
xml.etree.ElementTree.fromstringlist(sequence, parser=None) | 从字符串的序列对象中解析xml文档。缺省parser为XMLParser,返回Element实例。 |
xml.etree.ElementTree.indent(tree, space=’ ', level=0) | |
xml.etree.ElementTree.iselement(element) | 检查是否是一个element对象。 |
xml.etree.ElementTree.iterparse(source, events=None, parser=None) | 将文件或包含xml数据的文件对象递增解析为element tree,并且报告进度。events是一个汇报列表,如果忽略,将只有end事件会汇报出来。 |
xml.etree.ElementTree.parse(source, parser=None) | 将一个文件或者字符串解析为element tree。 |
xml.etree.ElementTree.ProcessingInstruction(target, text=None) | 这个方法会创建一个特别的element,该element被序列化为一个xml处理命令。 |
xml.etree.ElementTree.register_namespace(prefix, uri) | 注册命名空间前缀。这个注册是全局有效,任何已经给出的前缀或者命名空间uri的映射关系会被删除。 |
xml.etree.ElementTree.SubElement(parent, tag, attrib={}, **extra) | 子元素工厂,创建一个Element实例并追加到已知的节点。 |
xml.etree.ElementTree.tostring(element, encoding=‘us-ascii’, method=‘xml’, *, xml_declaration=None, default_namespace=None, short_empty_elements=True) | 生成一个字符串来表示表示xml的element,包括所有子元素。element是Element实例,method为"xml",“html”,“text”。返回包含了xml数据的字符串。 |
xml.etree.ElementTree.tostringlist(element, encoding=‘us-ascii’, method=‘xml’, *, xml_declaration=None, default_namespace=None, short_empty_elements=True) | 生成一个字符串来表示表示xml的element,包括所有子元素。element是Element实例,method为"xml",“html”,“text”。返回包含了xml数据的字符串列表。 |
xml.etree.ElementTree.XML(text, parser=None) | 从一个字符串常量中解析出xml片段。返回Element实例。 |
xml.etree.ElementTree.XMLID(text, parser=None) | 从字符串常量解析出xml片段,同时返回一个字典,用以映射element的id到其自身。 |
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
if __name__ == "__main__":
tree = ET.parse('country.xml')
root = tree.getroot() # 获取根
# print(root, type(root))
xml_str = ET.tostring(root)
root = ET.fromstring(xml_str)
# Top-level elements(当前节点就是根节点)
root.findall(".")
# All 'neighbor' grand-children of 'country' children of the top-level
# elements
root.findall("./country/neighbor")
# Nodes with name='Singapore' that have a 'year' child
root.findall(".//year/..[@name='Singapore']")
# 'year' nodes that are children of nodes with name='Singapore'
root.findall(".//*[@name='Singapore']/year")
# All 'neighbor' nodes that are the second child of their parent
root.findall(".//neighbor[2]")