$module "refal.plus.XML"; $use Access Convert Stream StdIO; $func? IsBlank t.term = ; IsBlank \{ ' '; '\n'; '\r'; '\t'; }; $func? IsBlankOrDelim t.delim t.term = ; IsBlankOrDelim t.delim t.term, t.term : \{ ' '; '\n'; '\r'; '\t'; t.delim; }; $func GetUntilDelim s.stream t.delim = e.expr; // no e.delim at the end GetUntilDelim s.stream t.delim = () $iter { :: e, { : v = (e.expr) Stop; : v.head = (e.expr ' ' v.head); (e.expr) Stop; }; } :: (e.expr) e.isStop, e.isStop : v = { e.expr : ' ' e.head = e.head; e.expr; }; $func? GetXMLFormat s.stream = t.comment; GetXMLFormat s.stream, : v = ((XML_FORMAT) '>>); $func? GetComment s.stream = t.comment; GetComment s.stream, : v = ((COMMENT) '>>); $func? GetCDATA s.stream = t.cdata; GetCDATA s.stream, : v = ((CDATA) '>>); $func FindTag s.stream = e.text (v.tag); FindTag s.stream = :: e.text, { \{ ; ; ; } :: e.text1 = e.text e.text1 ; e.text ('<' '> '>'); }; $func SplitAttrs e.text = e.attrs; SplitAttrs e.attrs, () (e.attrs) $iter { e.attrs : e.key '=' '"' e.value '"' e.tail = { e.tail : ' ' e.tail1 = e.tail1; e.tail; } :: e.tail, (e.keyvalues ( )) (e.tail); } :: (e.keyvalues) (e.attrs), e.attrs : /* empty */ = e.keyvalues; $func SplitName e.text = e.name (e.attrs); SplitName { e.name ' ' e.attrs = e.name (); e.name = e.name (); }; $func ReadTag s.stream v.tag = t; ReadTag s.stream v.tag, v.tag : { '<' e.name '/>' = :: e.name (e.attrs), ( ((ATTRIBUTES) e.attrs)); '<' e.name '>' = :: e.name (e.attrs), $iter e.text :: e.text (v.tag), v.tag : '', ( ((ATTRIBUTES) e.attrs) e.text); }; $public $func Read s.stream = e.text_then_XML_tag; Read s.stream = : e.text (v.tag), e.text ; $public $func? GetAttribute t.tag s.attrName = s.attrValue; GetAttribute (s (t e (s.attrName s.attrValue) e) e) s.attrName = s.attrValue; $public $func? GetTag t.tag t.innerTagName = t.innerTag; GetTag (s t e t.innerTag e) t.innerTagName, t.innerTag : (t.innerTagName e) = t.innerTag; $public $func? GetValue t.tag = e.value; GetValue (s t e.value) = e.value; $public $func? ReadXML e.fileName = e.xml; ReadXML e.fileName = $trap :: s.stream, { :: e.xml = , e.xml; = , $fail; } $with $fail; $func Main = e; Main = asbc'>>>;