2009-09-01 21 views
57

Vedo che ci sono alcune librerie di elaborazione XML in Haskell.Quale libreria XML Haskell usare?

  • HaXml sembra essere il più popolare (secondo dons)
  • HXT sembra essere il più avanzato (ma anche la più difficile da imparare grazie a frecce)
  • xml che sembra essere solo la parser base
  • HXML sembra essere abbandonato
  • tagsoup e tagchup
  • libxml e libXML SAX binding

Quindi, quale libreria per scegliere se lo voglio

  • per essere ragionevolmente potente (per estrarre i dati da XML e modificare XML)
  • che possono essere sostenute da molto tempo in futuro
  • di essere una “scelta comunità” (scelta di default)

E mentre la maggior parte di quanto sopra sembra essere sufficiente per le mie esigenze attuali, quali sono i motivi per sceglierne uno sopra gli altri?

UPD 20.091.222:

Alcune note sulle licenze:

risposta

53

mi raccomando:

  1. xml, se il vostro compito è semplice
  2. haxml, se il compito è complesso
  3. hxt, se come frecce
  4. hexpat se avete bisogno di alte prestazioni
+1

Grazie, don. Questo è il tipo di suggerimento che stavo cercando. – sastanin

+3

"probabilmente sarà supportato da molto tempo in futuro" Utilizzerei sicuramente Haxml. Ha 10 anni e gli autori sono molto attivi. –

+0

Bene, questo è un motivo importante per scegliere HaXml. Grazie! – sastanin

10

io personalmente consiglierei HXT perché usa le frecce, che sono uno strumento molto utile e potente per imparare, e una libreria parsing XML è l'uso ideale per le frecce (che sono stati inventati per risolvere vari problemi di analisi che le monadi non potevano). Le frecce iniziano anche a essere utilizzate al di fuori della pura programmazione funzionale, come ad esempio Arrowlets in JavaScript.

+1

Grazie, Will! Ecco perché ho iniziato a studiare HXT, ma temo anche che il codice scritto con HXT e le frecce sia meno amichevole per i potenziali contributori. Inoltre, mi allarme che HaXml sia molto più popolare. – sastanin

12

Il problema principale di HXT, a parte l'insolito arro w sintassi, sono le prestazioni e l'utilizzo della memoria. Ho un'app che spende 1.2 secondi di elaborazione circa 1.5 MB di XML, consumando circa 2,3 GB (!) Di memoria nel processo. Libxml2 richiede alcuni millisecondi sugli stessi dati. Anche l'estrazione dei dati tramite la funzione css e i predicati freccia sembrano molto lenti rispetto a Libxml2.