2008-11-20 15 views
8

xml'den python nesnesi temsili oluşturmak için kullanımı kolay bir python yerel modülünü arıyorum.modülü, xml'den python nesnesi temsili oluşturmak için kullanılır

Google'dan çeşitli modüller buldum (bunlardan biri XMLObject) ama hepsini denemek istemiyordu.

Sizce böyle şeyleri yapmanın en iyi yolu nedir?

DÜZENLEME: Okumak istediğim XML'in benim tarafımdan üretilmediğinden bahsetmeyi özlemiştim. Üzerinde herhangi bir kontrole sahip olmayan bir yapıdaki mevcut bir XML dosyası.

+0

Sadece bir nesneyi serileştirmek mi istiyorsunuz? veya XML zor bir gereklilik midir? –

+0

Varolan XML dosyalarını okumam gerekiyor - bu yüzden XML zor bir gerekliliktir – Martin

cevap

12

Sen ben düğümleri nesneler haline demek yorumlamak olacak bir nesne temsilini, istediğini söylüyorsun ve düğümün nitelikleri ve çocukların (muhtemelen bazı şemaya göre) hedefinin nitelikleri olarak temsil edilir. XMLObject'in yaptığı, inanıyorum.

Bildiğim bazı paketler var. 4Suite, bunu yapmak için bazı araçlar içerir ve inanıyorum ki, bu özellikle (4Suite üzerine inşa edilmiş) Amara'u uygular. Amara ve gnosis.xml.objectify'dan ilham alan lxml.objectify'u da kullanabilirsiniz.

Elbette üçüncü bir seçenek, XML'in somut bir temsili (ElementTree veya lxml kullanarak) verildiğinde, kendi özel modelinizi bunun üzerine kurabilirsiniz. lxml.html, lxml'nin temel arayüzünü, HTML'ye özgü bazı işlevlerle genişleten bir örnektir.

+0

Yorumunuz ile katılıyorum. –

+0

Python'da yazılmış 4Suite ve lxml mi? Böyle önemsiz bir sorunu çözmek için ikili dosyaları kurmak istemedim. – Martin

3

XML ile nadiren çalışıyorum ve deneyimden bir şey söyleyemem, en kolay olanının ElementTree olduğunu duydum.

5

Genellikle stdlib'de olduğu için xml.etree.ElementTree öğesinin öneri olarak ikinci sıradayım. Ayrıca daha hızlı bir uygulama, xml.etree.cElementTree de mevcut. Eğer gerçekten performansı gerekiyorsa Python Python nesne seri hale turşu ve cPickle modüllerine sahiptir

http://www.ibm.com/developerworks//xml/library/x-hiperfparse/

1

Lxml

, öneririm. Bu modüllerin her ikisi de seri hale getirmek için işlevsellik sağlamak/bir bayt akışı için/dönüştürme Python nesne hiyerarşisini serisini: seri için turşu(), unpickle():

şu içindeki bir arabirim sağlar için/XML

+0

Üzgünüm .. Okumak istediğim XML'in benim tarafımdan üretilmediğini söylemeyi özledim. Üzerinde herhangi bir kontrole sahip olmayan bir yapıdaki mevcut bir XML dosyası. – Martin

1

ben den XML belgesinden oluşturulan bir tuple oluşturan PyRXP kullanın (ve benzeri).

Düz XML -> python nesnesi yapısıyla ilgili temel sorun, atıfta bulunulan bir liste için herhangi bir python analogunun olmamasıdır; yani, özniteliklere sahip olan öğelerin yer aldığı bir liste. İsterseniz, aynı zamanda hem bir liste hem de sözlüktür.

Sonucu PyRXP'den ayrıştırıyorum ve yapıya bağlı olarak listeyi/sözlüğü yaratıyorum. Karşılaştığım XML ya liste ya da öznitelik tabanlı, her ikisi de değil. (Bilinen bir kaynaktan veri alıyorum).

+0

PyRXP yerel bir python modülü değil ya da değil mi? – Martin

+1

Hayır, muhtemelen C dilinde yazılmış 3. taraf bir modül. Sorunun bir kısmını kaçırmış olmalıyım. –

3

Ayrıca Python için mükemmel 3. parti kitaplığı pyxser var.

pyxser Python XML Serileştirme açılımı ve XML seri hale ve deserializer için bir Python nesne olduğunu. başka bir deyişle, Python nesnesini XML'e dönüştürebilir ve ayrıca bu XML dosyasını orijinal Python nesnesine dönüştürebilirsiniz.

İlgili konular