type

XParser

src @Js
class XParser : Obj

XParser is a simple, lightweight XML parser. It may be used as a pull parser by iterating through the element and text sections of an XML stream or it may be used to read an entire XML tree into memory as XElems.

constructors

make

Construct input stream to read.

fields

col

Current one based column number.

depth

Get the depth of the current element with the document.

doc

Get the root document node.

line

Current one based line number.

nodeType

Get the current node type constant which is always the result of the last call to next.

methods

close

Close the underlying input stream.

elem

Get the current element if nodeType is elemStart or elemEnd.

elemAt

Get the element at the specified depth.

next

Advance the parser to the next node and return the node type.

parseDoc

Parse the entire document into memory as a tree of XElems and optionally close the underlying input stream.

parseElem

Parse the current element entirely into memory as a tree of XElems and optionally close the underlying input stream.

pi

if the current node type is pi return the XPi instance otherwise return null.

skip

Skip parses all the content until reaching the end tag of the specified depth.

text

If the current type is text the XText instance used to store the character data.

Slot Details

close

src Bool close()

Close the underlying input stream. Return true if the stream was closed successfully or false if the stream was closed abnormally.

col

src Int col := 1 { private set }

Current one based column number.

depth

src Int depth := -1 { private set }

Get the depth of the current element with the document. A depth of zero indicates the root element. A depth of -1 indicates a position before or after the root element.

doc

src XDoc doc := XDoc.<ctor>() { private set }

Get the root document node.

elem

src XElem? elem()

Get the current element if nodeType is elemStart or elemEnd. If nodeType is text or pi then this is the parent element. After elemEnd this XElem instance is no longer valid and will be reused for further processing. If depth is -1 return null.

elemAt

src XElem elemAt(Int depth)

Get the element at the specified depth. Depth must be between 0 and depth inclusively. Calling elemAt(0) will return the root element and elemAt(depth) returns the current element. If depth is invalid IndexErr is thrown.

line

src Int line := 1 { private set }

Current one based line number.

make

src new make(InStream in)

Construct input stream to read.

next

src XNodeType? next()

Advance the parser to the next node and return the node type. Return the current node type:

nodeType

src XNodeType? nodeType { private set }

Get the current node type constant which is always the result of the last call to next. Node type will be:

parseDoc

src XDoc parseDoc(Bool close := true)

Parse the entire document into memory as a tree of XElems and optionally close the underlying input stream.

parseElem

src XElem parseElem(Bool close := true)

Parse the current element entirely into memory as a tree of XElems and optionally close the underlying input stream.

pi

src XPi? pi()

if the current node type is pi return the XPi instance otherwise return null.

skip

src Void skip(Int toDepth := this.depth)

Skip parses all the content until reaching the end tag of the specified depth. When this method returns, the next call to next will return the node immediately following the end tag.

text

src XText? text()

If the current type is text the XText instance used to store the character data. After a call to next this XText instance is no longer valid and will be reused for further processing. If the current type is not text then return null.