Appendix F. xml-conduit
Many developers cringe at the thought of dealing with XML files. XML has the reputation of having a complicated data model, with obfuscated libraries and huge layers of complexity sitting between you and your goal. I’d like to posit that a lot of that pain is actually a language and library issue, not inherent to XML.
Once again, Haskell’s type system allows us to easily break down the problem to its most basic
form. The xml-types package neatly deconstructs the XML data model (both a
streaming and DOM-based approach) into some simple ADTs. Haskell’s standard immutable data
structures make it easier to apply transforms to documents, and a simple set of functions makes
parsing and rendering a breeze.
We’re going to be covering the xml-conduit package.
Under the surface, this package uses a lot of the approaches Yesod in general utilizes for
high performance: blaze-builder, text, conduit, and
attoparsec. But from a user perspective, it
provides everything from the simplest APIs (readFile/writeFile) through full control
of XML event streams.
In addition to xml-conduit, there are a few related packages that
come into play, like xml-hamlet and xml2html. We’ll cover both how to use all these packages, and when they should be
used.
Synopsis
<document title="My Title">
<para>This is a paragraph. It has <em>emphasized</em> and <strong>strong</strong> words.</para>
<image href="myimage.png"/>
</document>{-# LANGUAGE QuasiQuotes ...