do xml-parse Full Description |
|
Syntaxdo xml-parse document (with id-checking Boolean-expression)? (creating xml-dtds key keyname)? scan (input source | (input input-function-call)) action+ done do xml-parse instance (with document-element element-name)? with (xml-dtds key key | current xml-dtds) (with id-checking Boolean-value)? scan (input source | (input input-function-call)) done Purpose You can invoke the markup processor, and its XML parser, with
do xml-parse is to process a complete XML document:
do xml-parse document scan file "my-xml.xml" output "%c" done This assumes that the file "myxml.xml" contains an XML document. You will often find that the DTD and the instance you want to process are in two different files. The simplest way to handle this is:
do xml-parse document scan file "my-dtd.dtd" || file "my-xml.xml" output "%c" doneBut suppose you have 20 instances to process, all of which use the same DTD. It is wasteful to parse the same DTD 20 times. To avoid doing this you can pre-compile the DTD and place it on the built-in shelf xml-dtds :
do xml-parse document creating xml-dtds key "my-dtd" scan file "my-dtd.dtd" suppress doneYou can then process each instance in turn. The following code assumes you have placed the file names of the instances on a shelf called "my-instances": repeat over my-instances do xml-parse instance with xml-dtds key "my-dtd" scan file my-instances output "%c" done againIn some cases you may wish to parse a partial instance, that is, a piece of data comprising an element from a DTD which is not the doctype element of that DTD. In this case you can specify the element to be used as the effective doctype for parsing the data:
do xml-parse instance with xml-dtds key "my-dtd" with document-element "lamb" scan file "partinst.xml" output "%c" doneThe element's start and end tags can be present, or they can be omitted if the element allows. XML comments, processing instructions, and even marked sections can precede and follow the element's start and end tags, but anything else (particularly other elements, data, entity references, or USEMAP declarations) is an error. By default, OmniMark checks all XML IDREF attributes to make sure they reference a valid ID. This checking may not be appropriate in processing a partial instance. It also takes time. You can turn this checking on and off using do xml-parse document scan file "my-xml.xml" with id-checking false output "%c" done When parsing a document, markup rules are fired as follows (if specified in your code):
When parsing an instance part only general markup rules are fired. If there are errors in the XML declaration or prolog (DTD), then the processing of the content of the |