2010-03-12 31 views
8

"python" ve "xml" için yapılan arama, ikisini birleştirmek için çeşitli kitaplıklar döndürür. Muhtemelen hatalıHangi amaçlar için hangi XML kütüphanesi?

Bu liste:

  • xml.dom
  • xml.etree
  • xml.sax
  • PyXML
  • BeautifulSoup xml.parsers.expat
  • ?
  • HTMLParser
  • htmllib birisi yüzden kullanabilir ve ne zaman kısa bir özetini sunabilir eğer

nazik ol

  • sgmllib.

  • +0

    Bu vesileyle güzel çorba ile gittim, diğerleri girdiler hakkında bilgi vermiyordu; Kontrol etmediğim bir şey. –

    +0

    Geliştirici verimliliğinden ve kullanım kolaylığı açısından bakıldığında, BeautifulSoup ile harika bir deneyim yaşadım. Anaconda python onunla birlikte geliyor. http://www.doughellmann.com/PyMOTW/xml/etree/ElementTree/parse.html – arun

    cevap

    7

    DOM/SAX bölmesi temel olanıdır. DOM ve SAX çapraz dil olduğu için sadece python için değil. Tüm belgeyi belleğe okuyun ve işleyin. Avantajlar: işaretlemesinde etiketlere

    • karmaşık ilişkiler
    • küçük karmaşık XML belgeleri
    • Dikkat:
      • Kullanımı kolay aşırı bellek

    SAX: ayrıştırma t okurken dokümanı okuyor. Avantajlar:

    • Uzun belgeleri veya açık uçlu akışları hafıza bir kısıtlama
    • Dikkat olan
    • yerleri:
      • Sen yanıltıcı olabilir bir durum bilgisi ayrıştırıcı, kod gerekir

    BeautifulSoup:

    HTML veya gayet iyi biçimlendirilmiş biçimlendirme için idealdir. Kullanımı kolay ve hızlı. Ekran kazıma, vb. Için iyi. XML tabanlı olanların işaretlemenin yanlış olduğunu söyleyen bir hatadan geçtiği yerlerde işaretleme ile çalışabilir.

    Geri kalanların çoğu kullanmıyorum ama ne zaman kullanacağım konusunda sert ve hızlı kurallar olduğunu sanmıyorum. Sadece standart düşünceleriniz: kim kodları korumak için gidiyor, hangi API'ları kullanmak en kolay buluyorsunuz, ne kadar iyi çalışıyorlar, vb.

    Genel olarak, temel ihtiyaçlar için, standart kütüphane modüllerini kullanmak güzel Çünkü bunlar "standart" ve dolayısıyla mevcut ve iyi bilinir.Bununla birlikte, eğer bir şeyi derinlemesine kazmanız gerekiyorsa, hemen hemen her zaman standart kütüphanenin dışında üstün işlevsellik ile yeni standart dışı modüller vardır.

    +0

    ayrıştırıcıları hem stilleri kullanarak bazı iyi elementtree örneklerle bu iyi maddeye rastladı standart api hakkında. Aslında haftanın 'python modülü' denir. –

    +0

    bağlantı pymotw iyi örneklerinden bir sürü vardır: – n611x007

    1

    XML ile fazla bir şey yapmıyorum, ancak ihtiyaç duyduğumda, lxml çalışmak için bir zevkti ve görünüşe göre oldukça hızlı. Öğe ağacı API'si nesne yönelimli bir ortamda çok güzel. sahip olduğu: Şimdiye kadar (BeautifulSoup da yardımcı olur ve her yerde olan kırık HTML, farklı, değil ortak bir sorun) kırık XML ayrıştırmak gerekiyorsa, ben BeautifulSoup hariç her şey için xml.etree esasen yeterli bulmak

    4

    XML belgelerinin tamamını bellekte okumak, gezinmek, onları oluşturmak, büyük dokümanları aşamalı olarak ayrıştırmak için makul destek. lxml, aynı arabirimi destekler ve genellikle daha hızlıdır - üçüncü taraf Python uzantılarını (örneğin, App Engine'de yapamayacağınız - ancak xml.etree hala var) yükleyebileceğinizde performansı zorlamak için yararlıdır, böylece tam olarak çalıştırabilirsiniz aynı kod). lxml da daha fazla özellik var ve BeautifulSoup da sunuyor.

    Çok farklı diller için tasarlanmış mimik API'leri kullandığınızdan bahsettiğiniz diğer lib'lar, genel olarak Python'u bu gyration'lara dönüştürmek için bir neden göremiyorum. Eğer xslt desteği, çeşitli doğrulamalar vb. Gibi çok özel gereksinimleriniz varsa, diğer kütüphaneler için etrafa bakmaya değer olabilir, ancak uzun zamandır bu tür ihtiyaçlara sahip değildim. onlar için teklifler.

    1

    Birçok sorun için xml ile alabilirsiniz. Standart kütüphanenin bir parçası olmanın en büyük avantajı vardır. Bu, neredeyse her sistemde önceden kurulmuş olduğu ve arabirimin durağan olacağı anlamına gelir. En iyisi ya da en hızlısı değil, ama orada.

    Diğer her şey için lxml var. Özellikle, lxml bozuk HTML, xHTML veya şüpheli yayınları ayrıştırmak için en iyisidir. XPath, XSLT ve EXSLT işlemek için libxml2 ve libxslt kullanır. Öğretici açıktır ve arayüz basit bir şekilde düz ileriye doğrudur. Belirtilen kütüphanelerin geri kalanı mevcuttu çünkü mevcut formda lxml mevcut değildi.

    Bu benim görüşüm.

    İlgili konular