[Haskell-cafe] HaXml 1.13 -> 1.22 upgrade

Antoine Latter aslatter at gmail.com
Sun Dec 11 07:36:52 CET 2011


On Sun, Dec 11, 2011 at 12:08 AM, Michael Orlitzky <michael at orlitzky.com> wrote:
> I'm trying to migrate one my programs from the old HaXml API to the new.
> Please, someone save me.
>
> I'm currently stuck with this, which works in 1.13. All of the filters work
> on Content, so I make some from the root element with the "root_elem = CElem
> root" line.
>
>  -- |Takes an XML String as an argument, and returns the
>  -- status that was parsed from it. Should only be used
>  -- on XML string where a <status> is a top-level element.
>  parse_status :: String -> [Status]
>  parse_status xml_data =
>    catMaybes maybe_status
>    where
>      (Document _ _ root _) = xmlParse xml_file_name xml_data
>      root_elem = CElem root
>      status_element = (single_status root_elem)
>      maybe_status = map status_from_content status_element
>
> In the new API, xmlParse returns the root element with type (Element i)
> rather than just Element. And the Content constructor I have to use is
> (CElem (Element i) i), but I have no way to pass the correct 'i' to it.
>

It looks like the function 'xmlParse' returns a value of type
'Document Posn', according to the API docs. I'm guessing the 'Posn'
value is used to annotate the position in the source document a
particular piece of XML came from, so you can report errors better.

Since the pretty-printing functions ignore it, you can replace it with
whatever you want, even with a value of a different type if you have a
need to annotate the tree.

> I just want to parse a few elements from an XML file.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list