ixml是一个迭代事件驱动的xml解析器,具有标准的python迭代器接口。

ixml的Python项目详细描述


一个简单的迭代事件驱动的XML解析器。图片::https://secure.travis ci.org/yamikep/ixml.png
:目标:https://travis ci.org/yamikep/ixml

…图片::https://coveralls.io/repos/yamikep/ixml/badge.png
:目标:https://coveralls.io/r/yamikep/ixml

…图片::https://pypip.in/v/ixml/badge.png
:目标:https://crate.io/packages/ixml/

…图片::https://pypip.in/d/ixml/badge.png
:目标:https://crate.io/packages/ixml/



ixml是一个迭代事件驱动的xml解析器,具有标准的python迭代器接口。



docs
----


。http://ixml.readthedocs.org/en/latest/




install
----


pypi(stable)::


pip install ixml

github(stable)::







main api
----

-``ixml.parse(data)``:返回解析事件的迭代器。

-``ixml.items(data,path,builder_klass=dictobjectbuilder)``:返回在指定路径下找到的python对象的迭代器。

注意:

-``data``必须是类似于文件的对象。

-由'`ixml.items``生成的python对象由'`objectbuilder`的解析事件构造``(``dictobjectbuilder``默认情况下)。只要实现了"objectbuilder"接口(请参见"ixml.builders.interface"),请自行创建该接口。

-top-level"ixml"模块会尝试自动找到并导入合适的解析后端。您还可以从"ixml.backends"显式导入所需的后端。






用法和示例
----


>所有示例都将使用此XML文档:

。代码::python

>;>;xml=''<;?xml version="1.0"encoding="utf-8"?>;
<;cities>;
<;city name="paris">;
<;country>;france<;/country>;
<;language>;french<;/language>;
<;景点>;
<;纪念碑>;埃菲尔铁塔<;纪念碑>;
<;纪念碑>;凯旋门<;/纪念碑>;
<;博物馆>;卢浮宫博物馆<;/博物馆>;
<;博物馆>;魁布兰利博物馆<;/博物馆>;
<;/景点>;
<;/城市>;
<;city name="dallas">;
<;country>;美国<;country>;
<;语言>;英语<;语言>;
<;景点>;
<;纪念碑>;美国银行广场<;纪念碑>;
<;纪念碑>;达拉斯剧院中心<;/纪念碑>;
<;博物馆>;达拉斯艺术博物馆<;/博物馆>;
<;博物馆>;老红色博物馆<;/博物馆>;
<;/景点>;
<;/城市>;
<;/城市>;''


-**ixml.parse**


使用"parse"函数,您可以对单个事件作出反应:

…代码::python

>;>import ixml
>;>from stringio import stringio

countries=set(),set()
>;>;对于ixml中的路径、事件、值。parse(数据):
…如果path='cities.city.language':
…语言。添加(值)
…elif path='城市.城市.国家':
…countries.add(value)
>>
set(['french','english'])set(['usa','france'])




下面是来自"parse"的所有解析事件:

……代码::python

('cities',u'start',none)
('cities.city',u'start',none)
('cities.city.@name','data','paris')
('cities.city.country','data','france')
('cities.city.language','data',"法语")
("cities.city.attractions",u"start",none)
("cities.city.attractions.monument","data","埃菲尔铁塔")
("cities.city.attractions.monument","data","凯旋门")
("cities.city.attractions.museum","data","卢浮宫博物馆")
("cities.city.attractions.museum","data","quai branly museum")
("cities.city.attractions",u'end',none)
("cities.city",u'end',none)
("cities.city",u'start',none)
("cities.city.@name","data",'dallas')
('cities.city.country','data','usa')
('cities.city.language','data','english')
('cities.city.attracties',u'start',none)
('cities.city.attracties.monument','data','美洲银行广场')
('城市.城市.景点.纪念碑','数据','达拉斯剧院中心')
('城市.城市.景点.博物馆','数据','达拉斯艺术博物馆')
('城市.城市.景点.博物馆','数据','老红色博物馆')
('城市.城市.景点',u'end',none)
('cities.city',u'end',none)
('cities',u'end',none)



-**ixml.items**


另一种用法是让ixml为具有"items"的特定路径生成本机python对象:

。代码::python

>;>import ixml
>;>from stringio import stringio

使用(city)




下面是创建的两个"city"python对象。默认情况下,它们被构造为dict。
您可以通过向"items"函数提供另一个生成器类来更改此行为。

…代码::python

{
‘国家’:‘法国’,
‘名称’:‘巴黎’,
‘语言’:‘法语’,
‘景点’:{
‘博物馆’:[‘卢浮宫博物馆’,‘奎布兰利博物馆’,
‘纪念碑’:[‘埃菲尔铁塔’,‘凯旋门’,
}
}
{
'国家':'美国',
'@name':'达拉斯',
'语言':'英语',
'景点':{
'博物馆':['达拉斯艺术博物馆','老红色博物馆',
'纪念碑':['美洲银行广场',"达拉斯剧院中心"]
}
}






分析事件
----


分析事件包含XML树上下文(路径)、事件和值::

(路径、事件、值)




1。**树上下文(或路径)**

这是一种简化的路径格式:

-使用点定义不同的级别
-在标记名中使用命名空间前缀
-忽略默认命名空间(在后台自动处理)
-使用@for属性

示例:

-rss.channel.item
-rss.channel.item@myattr
-rss.channel.ns1:item.title



2。**事件**

-"开始"和"结束"对于容器:

…代码::python

<;rss>;('rss','start',none)
<;..>;
<;rss>;('rss','end',none)



-"数据"用于树叶和属性:

。代码::python

<;rss>;
<;title myattr="test">;一些文本<;title>;('rss.title','data','some text'),('rss.title@myattr','data','test')
<;rss>;


<3。**值**

如果有值,它将方法是字符串,否则就没有。
当前没有自动转换功能(到int,等)。



backends
--


-``lxml iterparse```:围绕著名的"iterparse lxml<;http://lxml.de/parsing.html"iterparse和iterwalk>;`功能。

代码::python

>;>import ixml.backends.lxmliterparse as ixml
>;>……

将顶级库导入为"导入ixml"将尝试按顺序导入所有后端。

ixml当前需要"lxml<;http://lxml.de/>;`库,因为还没有基于标准库的回退后端。




----
``items``函数在分析数据时使用objectbuilder生成对象。


它接受三个参数:路径,事件类型和值。
正在生成的对象在任何时候都可以从"value"属性中使用。


只要实现了object builder接口,就可以创建自己的生成器(请参见ixml/builders/interface)。





-

测试依赖项::

$python setup.py develop
$pip install-r requirements\u tests.txt


确保测试通过::

$./scripts/runtests.sh


或使用tox::

$tox

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库