使使用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
````

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

推荐PyPI第三方库


热门话题
java变量始终存储0值。为什么?   如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?   java将commons DBCP从1.2升级到1.4,我应该害怕吗?   java如何使用分隔符拆分字符串?   java使用数组读取json对象   java在groovy中切片字符串   交换数组java的两个邻域元素   java移动用于确定字符串是否为回文的逻辑   java Android应用程序在一个活动中崩溃   java Sparkjava将webapp文件夹设置为静态资源/模板的文件夹   java复杂条件表达式,用户易用。   java如何仅在表存在时从表中选择值   java I无法将数据从Recyclerview传递到其他活动   java数据结构最佳设计(大数据)   java Android从DatePickerDialogFragment中删除日历视图   java将数据从Firebase获取到片段   数组。sort()在java中运行不正常