load xml
var text =
@[xml]
chardata
value
@[xml]
# Parse XML into a tree structure
var doc = xml.parse(text)
io.writeln('version =', doc.version, ' encoding =', doc.encoding)
# Obtaining the root element
var root = doc.root
io.writeln('<', root.tag, root.empty? '/>' : '>')
# processing instruction
var pi = (xml::Instruction)root.child(0)
io.writeln('', pi.target, pi.data, '?>' )
# character data
var cd = (xml::CharData)root.child(1)
io.writeln('chardata:', cd.kind, cd.data)
# getting a sub-element
var gr = root.elements[0]
io.writeln('<', gr.tag, 'atr="', gr['atr'], '">')
# finding a sub-element by path and/or attributes
var inner = root.find('group/el', b = '2')
io.writeln('inner text:', inner.text)
# mapping of data
# io.writeln('inner attribs:', inner.map($attribs, type(tuple, b: int>)))
# TODO;
# adding a sub-element str 1
gr.extend(el2 = (inner1 = 'str', inner2 = 1))
# serializing to XML
io.writeln(doc.serialize())