python库,用于将xml生成为流而不在内存中构建树。
elementflow的Python项目详细描述
#元素流
[![构建状态](https://travis ci.org/isagalaev/elementflow.png)(https://travis ci.org/isagalaev/elementflow)
elementflow是一个用于将XML生成为流的Python库。一些现有的
XML生成库(如EntEngEngt,LXML)在
内存中构建了一个完整的XML树,然后对其进行序列化。对于中等大小的xml
有效负载(考虑一个面向内容的web服务产生大量的xml数据
输出),这可能是低效的。python内置的xml.sax.saxutils.xmlgenerator非常低级,需要手动关闭元素。
老实说,大多数xml库在处理名称空间时都很糟糕。
“w”)可以是任何具有.write()方法的对象
,elementflow.xml(file,u'root')为xml:
xml.element(u'item,attrs={u'key':u'value'},text=u'text')
,具有xml.container(u'container,attrs={u'key':u'value'}):
xml.text(u'text')
xml.element(u'subelement',text=u'subelement text')
```
正确关闭容器元素需要使用'with'。库需要输入unicode字符串并生成utf-8编码的输出(如果愿意,python将自动转换为纯ascii字符串的u)。
xml和名称空间:
``python
with elementflow.xml(file,'root',namespaces={':'urn:n','n1':'urn:n1'})作为xml:
xml.element('item')
with xml.container('container',namespaces={'n2':'urn:n2'):
xml.element('n1:subelement')
xml.element('n2:subelement')
````
带有名称空间的元素使用前缀定义。您可以在根级别为任何容器定义名称空间
。库将检查未预先定义的名称空间
前缀,并在这种情况下引发valueerror。
还支持漂亮的打印:
``python
with elementflow.xml(file,'root',indent=true):
…
```
通过将XML生成代码包装到生成器
函数:
`` python
def g():
xml=elementflow.xml(elementflow.queue(),'root')
对于集合中的项:
xml.element(…)
yield xml.file.pop()
yield xml.file.pop()
````
`elementflow.queue()`是一个临时缓冲区,它接受来自xml
生成器的数据,并在对其调用.pop()时清除。如果len(xml.file)>;bufsize:
yield xml.file.pop()
```
[![构建状态](https://travis ci.org/isagalaev/elementflow.png)(https://travis ci.org/isagalaev/elementflow)
elementflow是一个用于将XML生成为流的Python库。一些现有的
XML生成库(如EntEngEngt,LXML)在
内存中构建了一个完整的XML树,然后对其进行序列化。对于中等大小的xml
有效负载(考虑一个面向内容的web服务产生大量的xml数据
输出),这可能是低效的。python内置的xml.sax.saxutils.xmlgenerator非常低级,需要手动关闭元素。
老实说,大多数xml库在处理名称空间时都很糟糕。
“w”)可以是任何具有.write()方法的对象
,elementflow.xml(file,u'root')为xml:
xml.element(u'item,attrs={u'key':u'value'},text=u'text')
,具有xml.container(u'container,attrs={u'key':u'value'}):
xml.text(u'text')
xml.element(u'subelement',text=u'subelement text')
```
正确关闭容器元素需要使用'with'。库需要输入unicode字符串并生成utf-8编码的输出(如果愿意,python将自动转换为纯ascii字符串的u)。
xml和名称空间:
``python
with elementflow.xml(file,'root',namespaces={':'urn:n','n1':'urn:n1'})作为xml:
xml.element('item')
with xml.container('container',namespaces={'n2':'urn:n2'):
xml.element('n1:subelement')
xml.element('n2:subelement')
````
带有名称空间的元素使用前缀定义。您可以在根级别为任何容器定义名称空间
。库将检查未预先定义的名称空间
前缀,并在这种情况下引发valueerror。
还支持漂亮的打印:
``python
with elementflow.xml(file,'root',indent=true):
…
```
通过将XML生成代码包装到生成器
函数:
`` python
def g():
xml=elementflow.xml(elementflow.queue(),'root')
对于集合中的项:
xml.element(…)
yield xml.file.pop()
yield xml.file.pop()
````
`elementflow.queue()`是一个临时缓冲区,它接受来自xml
生成器的数据,并在对其调用.pop()时清除。如果len(xml.file)>;bufsize:
yield xml.file.pop()
```