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
:目标: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