2011-06-24 99 views
6

我有一個XML文件,我想用python轉換成JSON文件,但是它的nt爲我工作。我該如何將xml文件轉換爲使用python的JSON?

<?xml version="1.0"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note> 

我使用ElementTree的,給它解析上述XML文件Simplejson序列化這樣的:

from xml.etree import ElementTree as ET 
import simplejson 

tree = ET.parse(Xml_file_path) 
simplejson.dumps(tree) 

它給了我一個錯誤:類型錯誤:xml.etree.ElementTree.ElementTree對象在0x00C49DD0不是JSON可串行化的。

+1

你必須明白,元素樹對象不是XML文件的完整表示,它只提供方法來訪問你想要的XML文件的任何部分。使用xml2json模塊的答案將滿足您的需求。 – razzmataz

回答

7

這可能是你在找什麼:

https://github.com/mutaku/xml2json

import xml2json 

s = '''<?xml version="1.0"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note>''' 
print xml2json.xml2json(s) 
15

另一種選擇是xmltodict(全面披露:我寫的)。它可以幫助您將XML轉換爲字典+列表+字符串結構,按照此"standard"。它基於Expat,因此速度非常快,不需要在內存中加載整個XML樹。

一旦你的數據結構,可以將其序列化到JSON:

import xmltodict, json 

o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>') 
json.dumps(o) # '{"e": {"a": ["text", "text"]}}' 
0

你可以嘗試使用xmljson。代碼爲

from xmljson import badgerfish as bf 
from xml.etree.ElementTree import fromstring 
s = '''<?xml version="1.0"?> 
<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
</note>''' 
json.dumps(bf.data(fromstring(s))) 
相關問題