[Haskell-cafe] XML modification

Jon Fairbairn jon.fairbairn at cl.cam.ac.uk
Fri Nov 25 10:36:01 CET 2011


Andrew Coppin <andrewcoppin at btinternet.com> writes:

> On 23/11/2011 12:58 PM, Andrew Coppin wrote:
>> On 23/11/2011 10:14 AM, Jon Fairbairn wrote:
>>> HaXml
>>
>> Mmm. That looks very promising...
>>
>>> which gives some idea of the flavour.
>>
>> OK. So it looks like processXmlWith is the function I want, if I'm going
>> to read one file and create another from it. So now I just need to
>> figure out which combinators I need. (The documentation seems a bit
>> thin.) Can you show me a snippet for how I would find [one] element
>> named "foo" and change its "bar" attribute to have the value "5"?
>
> Well, from what I've been able to gather, HaXml has a really
> nice filter combinator library. However...
>
> Weird thing #1: processXmlWith handles the common case of
> loading a file from disk, filtering it, and saving the
> result to disk again. However, it does this based on CLI
> arguments. There is no function anywhere that I can find
> which allows the host program to specify what files to
> process. If you want to do that, you have to reimplement
> most of the body of this function all over again yourself.
> That seems a strange omission.
>
> Weird thing #2: There are absolutely no filters for dealing
> with attributes. I couldn't find anything anywhere that says
> "apply this function to all the attributes of this element".
> I can find a function to /replace/ an element's attributes
> without regard to what existed before. But even something as
> trivial as adding an additional attribute while keeping the
> existing ones doesn't appear to be supported at all.
>
> Fortunately it turns out to not be especially hard to read
> the source for the replace-attributes function and change it
> to do what I want. But, again, it seems a rather large and
> obvious ommission. (I'm guessing that since attributes are
> key/value pairs and not "content", you would need a seperate
> "attribute filter" type, which is different from the
> existing content filters. Even so, it shouldn't be /that/
> hard to do...)
>
> Anyway, the important thing is, Haskell (and more
> specifically HaXml) let me accomplish the task I wanted
> without too much fuss. It's /certainly/ faster than editing
> 80 files by hand in a text editor!

I think these observations should be addressed to Malcolm
Wallace.

-- 
Jón Fairbairn                                 Jon.Fairbairn at cl.cam.ac.uk





More information about the Haskell-Cafe mailing list