Amara3项目,提供各种数据处理工具。此模块添加了对microxml的支持,并对经典xml进行了调整。
amara3.xml的Python项目详细描述
Amara3 XML
基于python 3和MicroXML
构建的数据处理库。本模块
添加了对microxml的支持,并对经典xml进行了调整。需要python 3.4+
使用
amara关注的是MicroXML,而不是完整的xml。 但是,因为您要处理的大多数类似xml的数据都是xml 1.0,amara提供解析遗留xml并将其减少到 微XML。在很多情况下,最大的影响是 命名空间信息被剥离。只要你知道你在做什么 你可以忽略这一点,但一定要知道 你在干什么。
from amara3.uxml import xml
MONTY_XML = """<monty xmlns="urn:spam:ignored">
<python spam="eggs">What do you mean "bleh"</python>
<python ministry="abuse">But I was looking for argument</python>
</monty>"""
builder = xml.treebuilder()
root = builder.parse(MONTY_XML)
print(root.xml_name) #"monty"
child = next(root.xml_children)
print(child) #First text node: "
“。” child=下一个(root.xml_children) print(child.xml_value)“什么叫“bleh” 打印(child.xml_attributes[“spam”])“eggs”
也有一些实用程序可以使这一点更容易。
from amara3.uxml import xml
from amara3.uxml.treeutil import *
MONTY_XML = """<monty xmlns="urn:spam:ignored">
<python spam="eggs">What do you mean "bleh"</python>
<python ministry="abuse">But I was looking for argument</python>
</monty>"""
builder = xml.treebuilder()
root = builder.parse(MONTY_XML)
py1 = next(select_name(root, "python"))
print(py1.xml_value) #"What do you mean "bleh""
py2 = next(select_attribute(root, "ministry", "abuse"))
print(py2.xml_value) #"But I was looking for argument"
实验性microxml解析器
对于这个解析器,真正的输入必须是microxml。基本知识:
>>> from amara3.uxml.parser import parse
>>> events = parse('<hello><bold>world</bold></hello>')
>>> for ev in events: print(ev)
...
(<event.start_element: 1>, 'hello', {}, [])
(<event.start_element: 1>, 'bold', {}, ['hello'])
(<event.characters: 3>, 'world')
(<event.end_element: 2>, 'bold', ['hello'])
(<event.end_element: 2>, 'hello', [])
>>>
或者…现在是完全不同的事情!…增量分析。
>>> from amara3.uxml.parser import parsefrags
>>> events = parsefrags(['<hello', '><bold>world</bold></hello>'])
>>> for ev in events: print(ev)
...
(<event.start_element: 1>, 'hello', {}, [])
(<event.start_element: 1>, 'bold', {}, ['hello'])
(<event.characters: 3>, 'world')
(<event.end_element: 2>, 'bold