[Haskell-cafe] [ANNOUNCE] text-xml-qq - XML quasiquoter for
Text.XML.Light
Oscar Finnsson
oscar.finnsson at gmail.com
Sat Oct 23 07:21:54 EDT 2010
Hi,
I've just released the first version of text-xml-qq, It's a Template Haskell
quasiquoter that converts XML code into Text.XML.Light.Element compile time.
Feature requests, bug fixes etc are welcomed. The package only got one
backend (xml-package) at the moment but it should be trivial to add more
backends (e.g. for a bytestring-based xml package).
You can embed Haskell variables in the xml code. Inside xml-elements you use
the syntax {foo} for embedded variables. If you wish to embed an element or
text you use the syntax <<foo>>. See example or the test-file
http://github.com/finnsson/text-xml-qq/blob/master/src/Text/XML/TestQQ.hs at
the project site http://github.com/finnsson/text-xml-qq.
-- Oscar
=== Example ===
Given the variables
url = "google.se"
elem = "gmail"
attrNs = "something"
attrName = "Pelle"
attrValue = "Arne"
elemCont = CRef "testing"
cont1 = Elem $ blank_element { elName = QName "hej" Nothing Nothing }
cont2 = CRef "other test"
the code
[$xmlQQ|
<{url}:{elem} {attrNs}:{attrName}={attrValue} attr="cool">
<elem ns1:elem1="1" ns2:elem2="2"><<elemCont>></elem>
<elem />
<el />
<<cont1>>
<<cont2>>
</{url}:{elem}>
|]
will generate the data structure
element {
elName = QName elem Nothing (Just url),
elAttribs = [Attr (QName attrName Nothing (Just attrNs)) attrValue,
Attr (qname "attr") "cool"],
elContent = [
(Elem $ blank_element { elName = QName "elem" Nothing Nothing,
elAttribs = [Attr (QName "elem1" Nothing (Just
"ns1")) "1",
Attr (QName "elem2" Nothing (Just
"ns2")) "2"],
elContent = [elemCont]
}),
(Elem $ blank_element { elName =QName "elem" Nothing Nothing}),
(Elem $ blank_element { elName = QName "el" Nothing Nothing}),
cont1,
cont2]
}
=== End example ===
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20101023/65c7b02d/attachment.html
More information about the Haskell-Cafe
mailing list