
Tom Spencer
In XSLT there is an XPath function that will let you select a particular node in the current context, for example;
This selects the first team element in the current context. Is there a work around to get similar functionality from the HaXml library?
It's easy to define, yes. Here is an "indexing" combinator that chooses one result of a CFilter, based on numeric position: index :: Int -> CFilter -> CFilter index n f = (\c-> [ (f c)!!n ]) So for your example, you want to write something like: index 0 (tag "team") `o` children This is probably the simplest way of doing your specific task, but there are of course other ways. The tool Xtract has a parser for XPath-like expressions, including more complex predicates, which get translated directly to combinator-style accessors. Unfortunately, the set of combinators used in Xtract is slightly different from those in the rest of HaXml, but they bear a close relationship. You could also use LabelFilters, e.g. (\cs-> ... cs!!0 ...) `oo` numbered (tag "team" `o` children) and doubtless there are other techniques too. Regards, Malcolm