2011-06-24 14 views
6

Python'u kullanarak JSON dosyasına dönüştürmek istediğim bir XML dosyası var, ancak nt benim için çalışıyor.Bir xml dosyasını python kullanarak JSON'a nasıl dönüştürebilirim?

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

Ben elementtree kullanarak ve onu veren ayrıştırma am Yukarıdaki XML dosyası böyle seri hale getirmek için Simplejson için:

from xml.etree import ElementTree as ET 
import simplejson 

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

Bana bir hata veriyor: at xml.etree.ElementTree.ElementTree nesnesi: TypeError 0x00C49DD0 seri hale getirilebilir JSON değil.

+1

, sadece ne istersen XML dosyasının parçaları erişmek için yöntemler sağlar olduğunu. Xml2json modülünü kullanmanın cevabı ihtiyaçlarınızı karşılayacaktır. – razzmataz

cevap

7

Bu aradığınızı muhtemelen:

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

Diğer bir seçenek xmltodict olduğu (tam açıklama: Ben yazdım). Bu, "standard"'u izleyerek XML'inizi bir dict + list + string yapısına dönüştürmenize yardımcı olabilir. Expat tabanlıdır, bu yüzden çok hızlıdır ve tüm XML ağacını belleğe yüklemeniz gerekmez.

o veri yapısına sahip sonra, JSON bunu serialize:

import xmltodict, json 

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

Sen xmljson kullanmayı deneyebilirsiniz. Aynı kod

Sen eleman ağaç nesne XML dosyasının tam bir temsili olmadığını anlamak zorunda
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))) 
İlgili konular