Print (XmlDoc/XmlNode subroutine)
Print selected subtree (XmlDoc and XmlNode classes)
This subroutine displays an XmlDoc subtree in a readable form,
useful for debugging, for example.
Syntax
nr:Print[( [xpath], [options])] Throws XPathError
Syntax terms
nr | An XmlDoc or XmlNode, used as the context node for the XPath expression. If an XmlDoc, the Root node is the context node. |
---|---|
XPath | A Unicode string that is an XPath expression that results in a nodelist, the head of which is the top of the subtree to print. An optional argument, its default is a period (.), that is, the node referenced by the method object (nr). |
options | A blank delimited string that can contain one or more of the following options. No option may be repeated.
|
Usage notes
- Options may be specified in any case. For example, you can use either NoXmlDecl or noxmldecl, interchangeably.
- As a debugging aide, Print may be issued for the root node of an XmlDoc that is not well-formed, that is, does not contain an Element.
- The Print method output is not affected if one of the output format options or Indent is specified, and an element to be serialized has the xml:space="preserve" or xml:space="default" attribute.
- As of version 6.7, the Print method uses the hexadecimal
character references specified in the XML Canonicalization specification
(:hp0 color=SirLink.http://www.w3.org/TR/xml-c14n:ehp0.) to
display the tab, carriage return, and linefeed characters
for the following XML document node types:
- Attribute
- Text
These character references are used:
- tab
- 	
- CR
- 
- LF
- 

The EBCDIC and corresponding ASCII encodings of the characters is:
- &thinsp.
- EBCDIC ASCII
- tab
- X'05' X'09'
- CR
- X'0D' X'0D'
- LF
- X'25' X'0A'
- As of Sirius Mods version 7.6, Attribute values are always serialized within double-quotation-mark (") delimiters, and a double-quotation mark character in an attribute value is serialized as ". Prior to version 7.6, this convention was not strictly observed.
- As of Sirius Mods version 7.6, XmlDoc content is stored in Unicode.
To serialize to EBCDIC, the Print method uses the Unicode tables
(described further in ?? refid=u80.) to convert the XmlDoc content.
One feature of the conversion from Unicode is that
the Print method displays non-translatable Unicode characters
stored in Attribute or Element values as character references.
For example:
%doc:AddElement('top', '™':U) %doc:Print
The result of this fragment is:
<top>™</top>
However, with default serialization options, when an untranslatable Unicode character occurs in a context other than Element or Attribute value (that is, a name, comment, or PI), character encoding is not used. Because it is an element name, for example, the following statements result in a request cancellation:
%doc:AddElement('™':U) %doc:Print
The Print method fails, attempting to translate the element name, the U+2122 character, to EBCDIC. This request cancellation can be prevented by using the CharacterEncodeAll option:
%doc:AddElement('™':U) %doc:Print(, 'CharacterEncodeAll')
The result of the above fragment is:
<™/>
Note: The result of a Print with CharacterEncodeAll can be misleading. Request cancellation is avoided, but it produces multiple EBCDIC characters where only a single Unicode character is stored.
The XmlDoc, %doc, above is not a legal XML document, because the ampersand (&) is not a legal name character. Similarly, for an untranslatable Unicode character added to a document with AddComment or AddPI: printing with CharacterEncodeAll produces a stream of characters that informs about a single character reference but, if deserialized, would result in multiple stored characters. The standard XML syntax does not recognize character references as such in names, Comments, and PIs.
Example
In the following example, the Print method is called first in its default form with no arguments, then with explicit values for its options:
Begin Print 'Print method' Print '***********' %doc is Object XmlDoc %doc = New Call %doc:LoadXml('<top><a>05</a><a2/></top>') %doc:Version ='1.0' Call %doc:Print Print 'Non-default display:' Call %doc:Print('/', 'NoXmlDecl NoEmptyElt Indent 6 Expanded') End
The example results follow:
<?xml version="1.0"?> <top> <a> 05 </a> <a2/> </top> Non-default display: <top> <a> 05 </a> <a2> </a2> </top>
Request-Cancellation Errors
- XPath is invalid.
- Result of (XPath) is empty.
- Options are invalid.
- Insufficient free space exists in CCATEMP.
See also
- For more information about using XPath expressions, see XPath.
- To more accurately serialize an XmlDoc, as opposed to providing a "displayable" form, use the Serial function. The Print subroutine, like its analogs ?? reftxt=Audit refid=audit. and ?? reftxt=Trace refid=trace., inserts line breaks and performs indentation.
- Additional serializing methods include:
- WebSend
- AddXml (HttpRequest class, described in the Janus SocketsR.)