XML Processing Python

szavazat
61

Én körülbelül építeni egy darab a projekt, hogy meg kell építeni, és küldjön egy XML dokumentum egy olyan internetes szolgáltatás, és szeretnék csinálni Python, mint azt, hogy bővíteni tudásomat is.

Sajnos, míg tudom, hogy az XML modell meglehetősen jól .NET vagyok bizonytalan, mi az előnye és hátránya van az XML modellek Python.

Bárki van tapasztalata ezzel az XML feldolgozás Python? Amennyiben azt sugallják, elkezdem? Az XML fájlok leszek épület lesz egyszerű.

A kérdést 02/08/2008 04:35
a forrás felhasználó
Más nyelveken...                            


16 válasz

szavazat
6

Dive Into Python egy fejezetet. Nem jótáll, hogy milyen jó lenne, ha mégis.

Válaszolt 02/08/2008 04:43
a forrás felhasználó

szavazat
22

Személy szerint én már játszottam több a beépített lehetőségek egy XML-nagy projekt, és telepedett pulldom a legjobb választás a kevésbé összetett dokumentumokat.

Különösen a kis egyszerű dolog, szeretem az eseményvezérelt elmélet elemzés helyett létrehozásáról egész megölte a visszahívások egy viszonylag egyszerű szerkezet. Itt van egy jó gyors tárgyalását, hogyan kell használni az API .

Amit szeretek: tudja kezelni elemzésekor a forhurok helyett callback segítségével. Azt is késlelteti a teljes elemzés (a „pull” rész), és csak kap további részletek, ha hívja expandNode(). Ez megfelel az én általános követelmény „felelős” a hatékonyság feláldozása nélkül a könnyű használat és az egyszerűség.

Válaszolt 02/08/2008 05:01
a forrás felhasználó

szavazat
30

ElementTree egy szép pythony API. Azt hiszem, ez is szállították részeként python 2.5

Ez tiszta python és ahogy mondtam, nagyon szép, de ha a szél fel igénylő nagyobb teljesítményt, akkor lxml kiteszi az azonos API és használja libxml2 a motorháztető alatt. Akkor elméletileg csak csere azt, amikor rájössz, szüksége van rá.

Válaszolt 02/08/2008 16:21
a forrás felhasználó

szavazat
3

Mivel említetted, hogy lesz épület „meglehetősen egyszerű” XML, az minidom modul (egy része a Python Standard Library) valószínűleg megfelel az igényeinek. Ha bármilyen tapasztalata a DOM XML reprezentációja, meg kell találni az API elég egyenesen előre.

Válaszolt 02/08/2008 19:04
a forrás felhasználó

szavazat
4

Írok egy SOAP fogadó szerver XML kéréseket, és létrehozza az XML válaszokat. (Sajnos, ez nem az én projektem, ezért zárt forráskódú, de ez egy másik probléma).

Kiderült számomra, hogy létre (SOAP) XML dokumentumok meglehetősen egyszerű, ha van egy adatstruktúra, hogy „illik” a sémát.

Folyton a borítékot, mert a válasz boríték (majdnem) ugyanaz, mint a kérés borítékot. Aztán, mivel én adatstruktúra egy (esetleg beágyazott) szótár, létrehozok egy karakterlánc, amely bekapcsolja ezt szótárt <kulcs> érték </ key> elemeket.

Ez a feladat, hogy a rekurzió teszi az egyszerű, és a végén a megfelelő struktúra. Ezt mind a python kódot, és jelenleg elég gyors éles használatra.

Azt is (viszonylag) könnyen épít listákat is, bár attól függően, hogy az ügyfél, akkor nyomja meg a problémákat, ha nem adsz hossza tippeket.

Számomra ez volt sokkal egyszerűbb, hiszen a szótár egy sokkal egyszerűbb módon működik, mint néhány egyedi osztály. A könyvek, generáló XML sokkal könnyebb, mint elemzés!

Válaszolt 03/08/2008 09:34
a forrás felhasználó

szavazat
3

Én személy szerint úgy gondolja, hogy a fejezetet Merülj Python nagy. Ellenőrizze, hogy ki először - ez használ a minidom modul és egy nagyon jó írás.

Válaszolt 11/08/2008 19:02
a forrás felhasználó

szavazat
1

Nemrég kezdtem el használni Amara sikerrel.

Válaszolt 11/08/2008 23:40
a forrás felhasználó

szavazat
5

Jelenleg 3 fő módja foglalkozó XML általában: dom, szaxofon, és az XPath. A dom modell jó, ha megengedheti magának, hogy töltse be teljes xml fájl memóriába egyszerre, és nem bánod foglalkozó adatszerkezetek, és mit keres a sok / a legtöbb modell. A szaxofon modell jó, ha csak érdekel a néhány tag, és / vagy van dolgunk nagy fájlokat és képes feldolgozni őket egymás után. Az XPath modell egy kicsit minden -, akkor válogathat utak az adatelemeket, amire szükség van, de többre van szükség, könyvtárak használata.

Ha azt szeretnénk, egyszerű és csomagolni Python, minidom a válasz, de ez elég béna, és a dokumentáció „itt docs on dom, menj kitalálni”. Ez igazán bosszantó.

Én személy szerint szeretem cElementTree, ami gyorsabb (c-alapú) végrehajtása ElementTree, ami egy dom-szerű modell.

Már használt szaxofon rendszerek, és sok szempontból ők inkább „pythonic” saját érzi magát, de én általában a végén létrehozása állami alapú rendszerek kezelni őket, és ily módon a jogok őrület (és bogarak).

Azt mondják, menjen minidom ha úgy tetszik a kutatás, illetve ElementTree ha jó kódot, hogy jól működik.

Válaszolt 16/09/2008 05:35
a forrás felhasználó

szavazat
1

Azt feltételezik, hogy a Net-utas feldolgozás XML épül'som az MSXML és az esetben azt feltételezzük, hogy a például minidom éreznéd magad valamivel otthon. Azonban, ha ez egyszerű feldolgozás csinálsz bármilyen könyvtára valószínűleg nem.

Én is szívesebben dolgozik ElementTree ha foglalkoznak xml Python, ez egy nagyon ügyes könyvtárban.

Válaszolt 16/09/2008 07:20
a forrás felhasználó

szavazat
5

Már használt ElementTree több projekt és ajánlom.

Ez pythonic, jön „a dobozban” Python 2.5, beleértve a C változat cElementTree (xml.etree.cElementTree), amely 20-szor gyorsabb, mint a tiszta Python verzió, és nagyon könnyen használható.

lxml van néhány előnye teljesítményt, de egyenetlen, és ellenőrizni kell a referenciaértékek első saját használatra ügyben.

Ahogy én látom, ElementTree kód könnyen lehet portolták lxml.

Válaszolt 23/09/2008 20:42
a forrás felhasználó

szavazat
1

Ha megy, hogy az épület SOAP üzeneteket, nézd meg soaplib . Ez használ ElementTree a motorháztető alatt, de ez egy sokkal tisztább felületet szerializálásáról és deserializing üzeneteket.

Válaszolt 13/10/2008 23:17
a forrás felhasználó

szavazat
5

Ez attól egy kicsit, milyen bonyolult a dokumentumot kell lennie.

Már használt minidom sok írásához XML, de ez általában már csak a dokumentumok olvasását, így néhány egyszerű átalakítások, és az írás őket vissza. Ez elég jól működött, amíg nem szükséges, a képesség, hogy rendelni elem attribútumait (kielégítésére egy ősi alkalmazás, amely nem sikerült feldolgozni az XML megfelelően). Ezen a ponton feladtam, és írt az XML magam.

Ha csak dolgozik egyszerű dokumentumokat, akkor csináld magad is gyorsabb és egyszerűbb, mint a tanulás kereteit. Ha tud elképzelhető levelet az XML kézzel, akkor valószínűleg kódolnod kézzel is (de ne feledje, hogy megfelelően speciális karaktereket, és használja str.encode(codec, errors="xmlcharrefreplace")). Ezen kívül snafus, XML szabályos elég, hogy nem kell, egy speciális könyvtár írni azt. Ha a dokumentum túl bonyolult ahhoz, hogy írni kézzel, akkor kéne nézni az egyik keretek már említett. Sehol sem kell meg kell írni egy általános XML író.

Válaszolt 14/10/2008 19:26
a forrás felhasználó

szavazat
4

Tudod is megpróbál kibogoz elemezni egyszerű XML dokumentumokat.

Válaszolt 31/10/2011 15:05
a forrás felhasználó

szavazat
1

Azt javasoljuk, SAX - Simple API for XML - végrehajtását a Python könyvtárak. Ezek viszonylag könnyű beállítani és a folyamat nagy XML által vezérelt még API, mint azt a korábbi poszterek itt, és alacsony a memóriát ellentétben érvényesítése DOM stílusban XML elemzők.

Válaszolt 12/12/2012 04:25
a forrás felhasználó

szavazat
3

Komoly munka XML Python használat lxml

Python jön ElementTree beépített könyvtárral, de lxml kiterjeszti a sebesség tekintetében, és alkalmassága (séma érvényesítését, szaxofon elemzés, XPath, különböző típusú iterátorokat és még sok egyéb).

Meg kell telepíteni, de sok helyen ez már feltételezzük, hogy része a szokásos berendezések (pl Google AppEngine nem engedélyezi a C alapú Python csomagok, de nem tesz kivételt lxml, pyyaml ​​és néhány más).

Épület XML dokumentumok E-gyár (az lxml)

A kérdés az, épület XML dokumentum.

A lxml számos módszer létezik, és elvitt egy darabig, hogy megtalálja az egyetlen, amely úgy tűnik, hogy könnyen kezelhető és könnyen olvasható.

Minta kódot lxml doc használatával E-gyár (kissé egyszerűsített):


Az E-gyár, egyszerű és kompakt szintaxis generáló XML és HTML:

>>> from lxml.builder import E

>>> html = page = (
...   E.html(       # create an Element called "html"
...     E.head(
...       E.title("This is a sample document")
...     ),
...     E.body(
...       E.h1("Hello!"),
...       E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
...       E.p("This is another paragraph, with a", "\n      ",
...         E.a("link", href="http://www.python.org"), "."),
...       E.p("Here are some reserved characters: <spam&egg>."),
...     )
...   )
... )

>>> print(etree.tostring(page, pretty_print=True))
<html>
  <head>
    <title>This is a sample document</title>
  </head>
  <body>
    <h1>Hello!</h1>
    <p>This is a paragraph with <b>bold</b> text in it!</p>
    <p>This is another paragraph, with a
      <a href="http://www.python.org">link</a>.</p>
    <p>Here are some reserved characters: &lt;spam&amp;egg&gt;.</p>
  </body>
</html>

Értékelem az E-gyár azt követő dolgok

Kód szól szinte az XML dokumentum

Olvashatóságot számít.

Létrehozását is lehetővé teszi az XML tartalom

Támogatja ilyesmi:

  • használata névterek
  • kezdő és befejező szöveg csomópontokkal egyik eleme
  • funkciók formázási attribútum tartalmát (lásd a funk CLASS teljes lxml minta )

Lehetővé teszi, hogy nagyon olvasható konstrukciók listákkal

például:

from lxml import etree
from lxml.builder import E
lst = ["alfa", "beta", "gama"]
xml = E.root(*[E.record(itm) for itm in lst])
etree.tostring(xml, pretty_print=True)

így:

<root>
  <record>alfa</record>
  <record>beta</record>
  <record>gama</record>
</root>

Következtetések

Én nagyon ajánlom lxml konzultáció - ez nagyon jól megírt, és kapsz több ok, hogy használni ezt a hatalmas könyvtár.

Az egyetlen hátránya a lxml van, hogy össze kell állítani. Lásd SO válaszoljon a további tippeket , hogyan kell telepíteni lxml a kerék méret csomag keretében a másodperc töredéke alatt.

Válaszolt 17/04/2014 22:32
a forrás felhasználó

szavazat
1

Azt hiszem, meg kell használni lxml erre funkcionalitása

Válaszolt 08/10/2014 06:58
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more