io.dylemma.spac.xml

This package provides extensions to the core "spac" library which allow for the handling of XML data.

Rather than creating explicit classes that extend Parser, Transformer, and Splitter, this package provides type aliases and implicit extensions. For example, XmlParser[A] is just a type alias for Parser[XmlEvent, A], and XmlParser is just a call to Parser[XmlEvent].

Three main Parser methods are added to Parser[XmlEvent] via the XmlParserApplyOps implicit class:

  • XmlParser.forText - for capturing raw text
  • XmlParser.attr - for capturing mandatory attributes from elements
  • XmlParser.attrOpt - for capturing optional attributes from elements

One main Splitter constructor method is added to Splitter via the XmlSplitterApplyOps implicit class:

  • Splitter.xml - for creating splitters based on an inspection of an "element stack"

Three main Splitter member methods are added to Splitter[XmlEvent, C] via the XmlSplitterOps implicit class:

  • .attr - alias for .joinBy(XmlParser.attr(...))
  • .attrOpt - alias for .joinBy(XmlParser.attrOpt(...))
  • .text - alias for .joinBy(XmlParser.forText)

A DSL for creating xml-specific ContextMatchers is provided to make it more convenient to call Splitter.xml. For example:

Splitter.xml("things" \ "thing").attr("foo").parseToList

Can be used to capture a list of the "foo" attributes in the <thing> elements in

<things>
   <thing foo="hello" />
   <thing foo="Goodbye">
      <extra>junk</extra>
   </thing>
</thing>

Type members

Classlikes

trait AsQName[N]

Adapter for various representations of QName

Adapter for various representations of QName

Companion:
object
object AsQName
Companion:
class
sealed trait XmlEvent extends HasLocation

Spac's internal representation of XML "events". Third-party xml streaming classes like javax.xml.stream or fs2-data can be supported by providing an AsXmlEvent implementation which converts the third-party event type into this type.

Spac's internal representation of XML "events". Third-party xml streaming classes like javax.xml.stream or fs2-data can be supported by providing an AsXmlEvent implementation which converts the third-party event type into this type.

Companion:
object
object XmlEvent
Companion:
class
final implicit class XmlParserApplyOps(val parserApply: ParserApplyWithBoundInput[XmlEvent]) extends AnyVal

XML-specific Parser constructor methods, for example XmlParser.attr and XmlParser.text

XML-specific Parser constructor methods, for example XmlParser.attr and XmlParser.text

trait XmlSpacException[Self <: XmlSpacException[Self]] extends SpacException[Self]

SpacException subtype for XML-specific exceptions

SpacException subtype for XML-specific exceptions

Companion:
object

Contains the actual XmlSpacException subtypes

Contains the actual XmlSpacException subtypes

Companion:
class
final implicit class XmlSplitterApplyOps(val splitter: Splitter.type) extends AnyVal

Adds Splitter.xml, for constructing element matcher-based XmlSplitters.

Adds Splitter.xml, for constructing element matcher-based XmlSplitters.

implicit class XmlSplitterOps[C](splitter: Splitter[XmlEvent, C])

XML-specific Splitter member methods, for example: attr, attrOpt, and text,

XML-specific Splitter member methods, for example: attr, attrOpt, and text,

Types

type ElemContextMatcher[+A] = SingleItemContextMatcher[ElemStart, A]
type XmlContextMatcher[+Context] = ContextMatcher[ElemStart, Context]
type XmlParser[+Out] = Parser[XmlEvent, Out]

Type alias for a Parser whose input type is XmlEvent.

Type alias for a Parser whose input type is XmlEvent.

type XmlSplitter[+C] = Splitter[XmlEvent, C]
type XmlTransformer[+Out] = Transformer[XmlEvent, Out]

Deprecated types

@deprecated("Use `XmlContextMatcher (with lowercase \'ml\') instead", "v0.9")
type XMLContextMatcher[+Context] = XmlContextMatcher[Context]
Deprecated
@deprecated("Use `XmlParser` (with lowercase \'ml\') instead", "v0.9")
type XMLParser[+Out] = XmlParser[Out]
Deprecated
@deprecated("Use `XmlSplitter` (with lowercase \'ml\') instead", "v0.9")
type XMLSplitter[+C] = XmlSplitter[C]
Deprecated

Value members

Concrete methods

def attr[N : AsQName](attrName: N): ElemContextMatcher[String]

Context matcher that extracts the given attribute from the element at the head of the stack.

Context matcher that extracts the given attribute from the element at the head of the stack.

Type parameters:
N

The name type - usually String, but can be any member of the [[AsQName]] typeclass. Note that for javax.xml.namespace.QName you will need to include the "spac-javax" support library.

Value parameters:
attrName

The name of the attribute to extract

def attrOpt[N : AsQName](attrName: N): ElemContextMatcher[Option[String]]

Context matcher that extracts the given optional attribute from the element at the head of the stack. If the attribute is missing from the head element, this matcher will succeed with a result of None, as opposed to the attr matcher which would fail.

Context matcher that extracts the given optional attribute from the element at the head of the stack. If the attribute is missing from the head element, this matcher will succeed with a result of None, as opposed to the attr matcher which would fail.

Type parameters:
N

The name type - usually String, but can be any member of the [[AsQName]] typeclass. Note that for javax.xml.namespace.QName you will need to include the "spac-javax" support library.

Value parameters:
attrName

The name of the attribute to extract

Context matcher that extracts the (local) name of the element at the head of the stack. Acts as a convenience for extractElemQName[String]

Context matcher that extracts the (local) name of the element at the head of the stack. Acts as a convenience for extractElemQName[String]

Context matcher that extracts the (qualified) name of the element at the head of the stack. The type-level representation of the name is chosen by the caller

Context matcher that extracts the (qualified) name of the element at the head of the stack. The type-level representation of the name is chosen by the caller

Type parameters:
N

The representation of the element's qualified name. This could be String, but in that case you should use extractElemName instead. For QName types such as the one from javax.xml, you must import a corresponding support package.

Concrete fields

Context matcher that matches any single element at the head of the tag stack.

Context matcher that matches any single element at the head of the tag stack.

Context matcher that matches any number of elements from the head of the tag stack.

Context matcher that matches any number of elements from the head of the tag stack.

Context matcher that always matches without consuming any of the tag stack.

Context matcher that always matches without consuming any of the tag stack.

val XmlParser: ParserApplyWithBoundInput[XmlEvent]

Like the Parser companion object, but only for creating Parsers whose input type is XmlEvent.

Like the Parser companion object, but only for creating Parsers whose input type is XmlEvent.

See also:
val XmlSplitter: SplitterApplyWithBoundInput[XmlEvent]
val XmlTransformer: TransformerApplyWithBoundInput[XmlEvent]

Deprecated fields

@deprecated("Use `XmlParser` (with lowercase \'ml\') to reference the parser companion", "v0.9")
val XMLParser: ParserApplyWithBoundInput[XmlEvent]
Deprecated
@deprecated("Use `XmlSplitter` (with lowercase \'ml\') for directly referencing the companion object, or use `Splitter.xml` to construct a new XmlSplitter", "v0.9")
val XMLSplitter: SplitterApplyWithBoundInput[XmlEvent]
Deprecated

Implicits

Implicits

final implicit def XmlParserApplyOps(parserApply: ParserApplyWithBoundInput[XmlEvent]): XmlParserApplyOps

XML-specific Parser constructor methods, for example XmlParser.attr and XmlParser.text

XML-specific Parser constructor methods, for example XmlParser.attr and XmlParser.text

final implicit def XmlSplitterApplyOps(splitter: Splitter.type): XmlSplitterApplyOps

Adds Splitter.xml, for constructing element matcher-based XmlSplitters.

Adds Splitter.xml, for constructing element matcher-based XmlSplitters.

final implicit def XmlSplitterOps[C](splitter: Splitter[XmlEvent, C]): XmlSplitterOps[C]

XML-specific Splitter member methods, for example: attr, attrOpt, and text,

XML-specific Splitter member methods, for example: attr, attrOpt, and text,

implicit def elem[N](elemName: N)(implicit N: AsQName[N]): ElemContextMatcher[Unit]

Context matcher that matches the element at the head of the stack as long as its name matches the given elemName

Context matcher that matches the element at the head of the stack as long as its name matches the given elemName

This is normally called implicitly, e.g. with Splitter.xml("foo" \ "bar"), but of course can be called explicitly, e.g. val matcher = elem("foo") \ elem("bar")

Type parameters:
N

The name type - usually String, but can be any member of the [[AsQName]] typeclass. Note that for javax.xml.namespace.QName you will need to include the "spac-javax" support library.

Value parameters:
elemName

The name of the element.