Lists Home |
Date Index |
- From: Steve Ball <Steve.Ball@zveno.com>
- To: "Simon St.Laurent" <email@example.com>
- Date: Fri, 11 Aug 2000 09:46:53 +1000
"Simon St.Laurent" wrote:
> We have occasional battles here about the wisdom of using
> non-XML-parser-based tools to process XML, and regular expressions always
> seem to come up.
> I've got a reader question that sort of ties into a (non-regex-based) Java
> project I'm working on, about the viability of regex and other text-based
> processing for XML work.
> Has anyone written a generic XML parser, even a somewhat broken one, that's
> built on regular expressions? I remember hearing of something a long while
> ago, but I can't find it.
I am the author of the TclXML Open Source XML parser(s) for the Tcl/Tk
scripting language. TclXML now provides wrappers for parsers such as
Expat and (soon) Xerces-C, but it also includes a 100% Pure Tcl (tm)
XML parser. TclXML aims to be a compliant XML processor, and is close
to achieving that goal.
See http://www.zveno.com/ for further information and pointers to
the source code.
The Tcl parser is just a big regular expression engine. My
of using REs for parsing XML is that it is like performing brain surgery
with a chainsaw: you get the job done, but you have to scrape lots of
important bits off the wall and put tham back in where they belong.
TclXML uses an RE to chop up the input string and then iteratively
filters the pieces. Attribute values are handled by another RE,
as well as other constructs such as entity references and the
Some characters are allowed in XML that throw a spanner in the works
of REs. Some are obvious, such as CDATA sections and comments.
Others are more subtle, such as '>' in an attribute value.
Handling the edge conditions is hard work, but building a compliant
XML parser using REs is certainly do-able.
Steve Ball | Swish XML Editor | Training & Seminars
Zveno Pty Ltd | Web Tcl Complete | XML XSL
http://www.zveno.com/ | TclXML TclDOM | Tcl, Web Development
Ph. +61 2 6242 4099 | Mobile (0413) 594 462 | Fax +61 2 6242 4099