Mixed Markup Processing

Tree processing can be selected for only the part of a document (<table> in this case) that needs its advantages:

 program xmlserial, xmltree, textpatterns;
 parseXmlSerially ();
 choose xmlElement ("doc") {
   println (".startdoc"); processChildren; println (".enddoc");
 }
 choose xmlElement ("p") :> processChildren;
 choose xmlElement ("table") :> xmlElementNode (*.captureTree ());
 choose xmlElementNode ("table") {
   println (".starttable"); processChildren; println (".endtable");
 }
 choose xmlElementNode ("tr") {
   println (".startrow"); processChildren; println (".endrow");
 }
 choose xmlElementNode ("td") {
   println (".tableitem "); processChildren;
 }
 choose xmlText =
   println (*.data) unless *.data matches ([" tn"]* & -|);
 choose xmlTextNode =
   println (*.data) unless *.data matches ([" tn"]* & -|);
Beyond OmniMark Sam Wilmott
Slide 21 of 37 www.wilmott.ca