2014-04-04 5 views
5

Sto cercando di analizzare il seguente documento XML con HXT:Haskell HXT: parsing di documenti XML con DTD remoto senza HXT-curl

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Key</key> 
    <string>Value</string> 
</dict> 
</plist> 

Non voglio alcuna convalida qui poiché essa richiederà l'accesso alla rete . Purtroppo, HXT vuole ancora hxt-curl/hxt-http pacchetti installati per analizzare questo semplice documento:

Prelude> :m +Text.XML.HXT.Core 
Prelude Text.XML.HXT.Core> runX $ readDocument [withValidate no] "example.xml" 

fatal error: HTTP handler not configured, 
please install package hxt-curl and use 'withCurl' config option 
or install package hxt-http and use 'withHTTP' config option 

non voglio aggiungere hxt-curl/hxt-http pacchetti alla lista delle dipendenze poiché non ho davvero bisogno di loro. Non posso cambiare i documenti che sto analizzando. Passare a un'altra libreria di analisi XML è anche indesiderabile.

C'è un modo per analizzare il documento di esempio con HXT senza aggiungere pacchetti non necessari?

risposta

6

Devi anche dichiarare withSubstDTDEntities no, i. e.

runX $ readDocument [withValidate no, withSubstDTDEntities no] "example.xml" 

Spiegazione: L'impostazione di default per questa configurazione è sì e credo che sia il motivo per cui HXT tenta di scaricare il file DTD. Da the documentation:

Switching questa opzione e l'off convalida può portare a parsing più veloce, in questo caso la lettura dei documenti DTD non è più necessario.

+0

Grazie mille, funziona come un fascino. –