-
Notifications
You must be signed in to change notification settings - Fork 0
Conversion
philcali edited this page Jul 5, 2012
·
5 revisions
This section covers converting a collection of LMXML nodes into something useful.
The core library ships with two types of converters:
XmlConvert-
Transform(a special converter covered in Templating)
An LmxmlConvert[A] trait is a function object, where type A
is the result of the conversion.
Take a look at the XmlConvert definition.
Here is an example of parsing lmxml from a file, using the DefaultLmxml
object.
import lmxml._
val xml = DefaultLmxml.fromFile("test.lmxml")(XmlConvert)
println(xml)As mentioned earlier, LmxmlConvert objects are simply Scala functions underneath,
and therefore, can compose.
As an example, I want to censor all TextNode's coming in, replacing them with
REDACTED.
object Censor extends SinglePass[ParsedNode] {
def single(node: ParsedNode) = node match {
case t: TextNode => TextNode("REDACTED", children = apply(cs))
case l: LmxmlNode => l.copy(children = apply(cs))
case _ => node
}
}
val contents = """
lmxml
has "many"
great "features"
"""
val result = DefaultLmxml.convert(contents)(Censor andThen XmlConvert)
println(result)
/*
<lmxml>
<has>REDACTED</has>
<great>REDACTED</great>
</lmxml>
*/