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"]* & -|);