使使用xml感觉像使用json
xmltodict的Python项目详细描述
#xmltodict
`xmltodict`是一个python模块,它使使用xml的工作感觉就像使用[json]一样(http://docs.python.org/library/json.html),如这个["spec"](http://www.xml.com/pub/a/2006/05/31/converting between xml and json.html):
[![构建状态](https://secure.travis ci.org/martinblech/xmltodict.svg)(http://travis ci.org/martinblech/xmltodict)
``` python
>;>>打印(json.dumps(xmltodict.parse(""
…<;mydocument has="an attribute">;
…<;和>;
…<;许多>;元素<;许多>;
…<;许多>;更多元素<;许多>;
…<;/和>;
…<;plus a="复杂">;
…元素也
…<;/plus>;
…<;/mydocument>;
…""),indent=4))
{
"mydocument":{
"@has":"一个属性"、
"和":{
"许多":[
"元素"、
"更多元素"
]
}、
"加上":{
"@a":"复杂"、
"文本":"元素也"
}
}
````
<;root xmlns="http://defaultns.com/"
…xmlns:a="http://a.com/"
…xmlns:b="http://b.com/">;
…<;x>;1<;x>;
…<;a:y>;2<;a:y>;
…<;b:z>;3<;b:z>;
…<;/ROOT>;
…""
>>>xmltodict.parse(xml,process_namespaces=true)={
…'http://defaultns.com/:根':{
…'http://defaultns.com/:x':'1',
…'http://a.com/:y':'2',
…'http://b.com/:z':'3',
…} BR/>}
true
```
它还允许您将某些名称空间折叠成速记前缀,或将其全部跳过:
```python
>;>http://defaultns.com/':无,跳过此命名空间
…'http://a.com/':'ns_a',折叠"http://a.com/"->;"ns_a"
…}
>;>>xmltodict.parse(xml,process_namespaces=true,namespaces=namespaces)=={
…'根":{
…"X':'1',
…'是的:'2',
…http://b.com/:z':'3',
…},
…}
true
```
处理艺术家(艺术家):
…印刷品(艺术家[姓名])
…返回true
>;
>; …item_depth=2,item_callback=handle_artist)
一个完美的圆
fant_mas
king crimson
chris potter
…
`````
````
```sh
>$bunzip2 enwiki-pages-pages-articles.xml.bz2 xmltodict.py 2 myscript.py
accessiblecomputing
《无政府主义》
《阿富汗历史》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《孤独症》
………
``
````
或者仅仅缓存所以你不必再分析那个大的XML文件了在。您只需执行一次:
``sh
$bunzip2 enwiki-pages-articles.xml.bz2 xmltodict.py 2 gzip>;enwiki.dicts.gz
````
i.dicts.gz script1.py
$gunzip enwiki.dicts.gz script2.py
…
````
响应":{
…"状态':'好',
…'上次更新时间:'2014-02-16t23:10:12z',
…} BR/>}
>;>gt;打印(取消分析(mydict,pretty=true))
<;?xml version="1.0"encoding="utf-8"?>;
<;response>;
<;status>;good<;/status>;
<;last_updated>;2014-02-16t23:10:12z<;/last_updated>;
<;/response>;
````
节点的文本值可以用python dict中的"cdata_key"键指定,而节点属性可以用"attr_prefix"前缀指定,前缀为python dict中的键名称。python dict."attr_prefix"的默认值是"@",而"cdata_key"的默认值是"text"。
``python
>;>import xmltodict
>;
>;>mydict={
…。文本":{
…"@颜色":"红色",
…"@笔划":"2",
…"#文本':'这是一个测试'
…} BR/>}
>;>>打印(xmltodict.unparse(mydict,pretty=true))
<;?xml version="1.0"encoding="utf-8"?>;
<;text stroke="2"color="red">;这是一个测试<;text>;
````
### Using pypi
You just need to
```sh
$ pip install xmltodict
```
### RPM-based distro (Fedora, RHEL, …)
There is an [official Fedora package for xmltodict](https://apps.fedoraproject.org/packages/python-xmltodict).
```sh
$ sudo yum install python-xmltodict
```
### Arch linux
有一个[xmltodict的官方arch linux包](https://www.archlinux.org/package s/community/any/python xmltodict/)。
```sh
$sudo pacman-s python xmltodict
````
kg/python xmltodict)。
```sh
$sudo apt install python xmltodict
````
`xmltodict`是一个python模块,它使使用xml的工作感觉就像使用[json]一样(http://docs.python.org/library/json.html),如这个["spec"](http://www.xml.com/pub/a/2006/05/31/converting between xml and json.html):
[![构建状态](https://secure.travis ci.org/martinblech/xmltodict.svg)(http://travis ci.org/martinblech/xmltodict)
``` python
>;>>打印(json.dumps(xmltodict.parse(""
…<;mydocument has="an attribute">;
…<;和>;
…<;许多>;元素<;许多>;
…<;许多>;更多元素<;许多>;
…<;/和>;
…<;plus a="复杂">;
…元素也
…<;/plus>;
…<;/mydocument>;
…""),indent=4))
{
"mydocument":{
"@has":"一个属性"、
"和":{
"许多":[
"元素"、
"更多元素"
]
}、
"加上":{
"@a":"复杂"、
"文本":"元素也"
}
}
````
<;root xmlns="http://defaultns.com/"
…xmlns:a="http://a.com/"
…xmlns:b="http://b.com/">;
…<;x>;1<;x>;
…<;a:y>;2<;a:y>;
…<;b:z>;3<;b:z>;
…<;/ROOT>;
…""
>>>xmltodict.parse(xml,process_namespaces=true)={
…'http://defaultns.com/:根':{
…'http://defaultns.com/:x':'1',
…'http://a.com/:y':'2',
…'http://b.com/:z':'3',
…} BR/>}
true
```
它还允许您将某些名称空间折叠成速记前缀,或将其全部跳过:
```python
>;>http://defaultns.com/':无,跳过此命名空间
…'http://a.com/':'ns_a',折叠"http://a.com/"->;"ns_a"
…}
>;>>xmltodict.parse(xml,process_namespaces=true,namespaces=namespaces)=={
…'根":{
…"X':'1',
…'是的:'2',
…http://b.com/:z':'3',
…},
…}
true
```
处理艺术家(艺术家):
…印刷品(艺术家[姓名])
…返回true
>;
>;
一个完美的圆
fant_mas
king crimson
chris potter
…
`````
````
```sh
>$bunzip2 enwiki-pages-pages-articles.xml.bz2 xmltodict.py 2 myscript.py
accessiblecomputing
《无政府主义》
《阿富汗历史》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《阿富汗藏书》
《孤独症》
………
``
````
或者仅仅缓存所以你不必再分析那个大的XML文件了在。您只需执行一次:
``sh
$bunzip2 enwiki-pages-articles.xml.bz2 xmltodict.py 2 gzip>;enwiki.dicts.gz
````
i.dicts.gz script1.py
$gunzip enwiki.dicts.gz script2.py
…
````
响应":{
…"状态':'好',
…'上次更新时间:'2014-02-16t23:10:12z',
…} BR/>}
>;>gt;打印(取消分析(mydict,pretty=true))
<;?xml version="1.0"encoding="utf-8"?>;
<;response>;
<;status>;good<;/status>;
<;last_updated>;2014-02-16t23:10:12z<;/last_updated>;
<;/response>;
````
节点的文本值可以用python dict中的"cdata_key"键指定,而节点属性可以用"attr_prefix"前缀指定,前缀为python dict中的键名称。python dict."attr_prefix"的默认值是"@",而"cdata_key"的默认值是"text"。
``python
>;>import xmltodict
>;
>;>mydict={
…。文本":{
…"@颜色":"红色",
…"@笔划":"2",
…"#文本':'这是一个测试'
…} BR/>}
>;>>打印(xmltodict.unparse(mydict,pretty=true))
<;?xml version="1.0"encoding="utf-8"?>;
<;text stroke="2"color="red">;这是一个测试<;text>;
````
### Using pypi
You just need to
```sh
$ pip install xmltodict
```
### RPM-based distro (Fedora, RHEL, …)
There is an [official Fedora package for xmltodict](https://apps.fedoraproject.org/packages/python-xmltodict).
```sh
$ sudo yum install python-xmltodict
```
### Arch linux
有一个[xmltodict的官方arch linux包](https://www.archlinux.org/package s/community/any/python xmltodict/)。
```sh
$sudo pacman-s python xmltodict
````
kg/python xmltodict)。
```sh
$sudo apt install python xmltodict
````