Xml (XmlDoc function): Difference between revisions
m (1 revision) |
m (→See also) |
||
(20 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{Template:XmlDoc:Xml subtitle}} | {{Template:XmlDoc:Xml subtitle}} | ||
The <var>Xml</var> function converts an <var>XmlDoc</var> to its textually represented XML document (this process is called '''serialization''', because the text representation of a document is called the '''serial''' form). | |||
==Syntax== | ==Syntax== | ||
{{Template:XmlDoc:Xml syntax}} | {{Template:XmlDoc:Xml syntax}} | ||
===Syntax terms=== | ===Syntax terms=== | ||
<table class="syntaxTable"> | <table class="syntaxTable"> | ||
<tr><th> | <tr><th>%string</th> | ||
<td>The string serialization of the <var> | <td>The string serialization of the <var>XmlDoc</var>, encoded in UTF-8.</td></tr> | ||
<tr><th>doc</th> | <tr><th>doc</th> | ||
<td><var> | <td><var>XmlDoc</var> expression, whose content is to be serialized.</td></tr> | ||
<tr><th>options</th> | <tr><th>options</th> | ||
<td> | <td>A blank delimited string that can contain one or more of the following options (but no repeats). | ||
<p class=" | <p class="note">'''Note:''' These options are described in greater detail in [[XmlDoc API serialization options|"XmlDoc API serialization options"]]. </p> | ||
<ul> | |||
<li><b>AllowXmlDecl</b> or <b>NoXmlDecl</b><br> | |||
Whether or not the serialization will contain the "XML Declaration" (<code><?xml version=...?></code>), if the value of the <var>[[Version (XmlDoc property)|Version]]</var> property is a non-null string, and if the <var>XmlDoc</var> is not empty. <var>AllowXmlDecl</var> is the default. </li> | |||
<li><b>Indent <i>n</i></b><br> | |||
<li> | Inserts space characters and line-ends into the serialized string such that if the string is broken at the line-ends and displayed as a tree, the display of each lower level in the subtree is indented ''n'' spaces from the previous level's starting point. You must also specify <code>CR</code>, <code>LF</code>, or <code>CRLF</code> (see below). </li> | ||
< | |||
<li><b>CR</b> (carriage-return), <b>LF</b> (linefeed), or <b>CRLF</b> (carriage-return followed by a linefeed)<br> | |||
Inserts one of these line-end options to provide line breaks in the serialized output. </li> | |||
( | |||
< | |||
< | |||
< | |||
</ | |||
<li><b>NoEmptyElt</b><br> | |||
This deprecated option serializes all empty elements with a start tag followed by an end tag. The default is to serialize an empty element with an empty element tag (as in <code><middleName/></code>). | |||
<p> | |||
<var>NoEmptyElt</var> is deprecated in order to deter users from using it to serialize HTML: The recommended approach for HTML is shown on the <var>[[NoEmptyElement (XmlNode property)#browserExample|NoEmptyElement]]</var> property page — some tags (<code><div></code>) <b>require</b> separate start and end tags, while other tags (<code><br></code>) <b>do not allow</b> separate start and end tags. </p></li> | |||
<li><b>OmitNullElement</b><br> | |||
< | An <var>Element</var> node that has no children and no <var>Attributes</var> will not be serialized, unless it is the top level <var>Element</var> in the subtree being serialized. </li> | ||
< | |||
< | |||
< | |||
< | |||
< | |||
< | |||
</ | |||
<li><b>SortCanonical</b><br> | |||
< | This deprecated option serializes namespace declarations and attributes in sorted order (from lowest to highest with Unicode code ordering). It is superseded by the <var>[[Serial (XmlDoc/XmlNode function)|Serial]]</var> method <var>ExclCanonical</var> option. </li> | ||
< | </ul></td></tr> | ||
< | </table> | ||
< | |||
< | |||
< | |||
< | |||
< | |||
</ | |||
< | |||
==Usage notes== | |||
<ul> | |||
<li>Options may be specified in any case, for example, you can use either <code>NoXmlDecl</code> or <code>noxmldecl</code>, interchangeably. | |||
<li>The <var>Xml</var>Doc method object must be well-formed (that is, it must contain an <var>Element</var> node). For more information, see [[XML processing in Janus SOAP#Well-formed documents and validation|"Well-formed documents and validation"]]. | |||
<li>Since the result of the <var>Xml</var> function has UTF-8 encoding, you cannot treat it as an EBCDIC string: for example, printing the string will not produce displayable characters. The [[#See also|"See Also"]] section below mentions some methods for obtaining an EBCDIC serialization of an <var>XmlDoc</var>. | |||
<li>You can use the <var>[[Print (XmlDoc/XmlNode subroutine)|Print]]</var> method to display a document on the terminal, or to ''capture'' a displayable version of a document, but <var>Print</var> is | |||
used to insert line breaks and optional indentation, which may not be an accurate serialization of an <var>XmlDoc</var>. | |||
<li>As of <var class="product">Sirius Mods</var> Version 7.6, <var>Attribute</var> values are always serialized within double-quotation-mark (<tt>"</tt>) delimiters, and a double-quotation mark character in an attribute value is serialized as <code>&quot;</code>. Prior to Version 7.6, this convention was not strictly observed. | |||
</ul> | </ul> | ||
==Examples== | ==Examples== | ||
< | <ol> | ||
<li>The [[ | <li>The <var>[[AddXml (HttpRequest subroutine)|AddXml]]</var> method of the <var>[[HttpRequest class|HTtpRequest]]</var> class has nearly the same options as the <var>Xml</var> function. The following fragment serializes an <var>XmlDoc</var> and sends it as a request to a web server. | ||
<p>Note that if you use the <var>Xml</var> function and <var>[[$Sock_Send]]</var> directly, instead of using an <var>[[HTTP Helper]]</var> object, always use the <var>BINARY</var> option of <var>$Sock_Send</var>, because the result of the <var>Xml</var> function is UTF-8, rather than EBCDIC.</p> | |||
<p class="code"> %httpreq object httpRequest | |||
as a request to a | %httpresp object httpResponse | ||
%doc object xmlDoc | |||
Note that if you use the <var>Xml</var> function and $Sock_Send directly, | %httpreq = new | ||
instead of using an HTTP | %doc = new | ||
the BINARY option of $Sock_Send, because the | %doc:[[LoadXml_(XmlDoc/XmlNode_function)|loadXml]]('<inquire><stock>IBM</stock>' with - | ||
result of the | <dateRange/></inquire>', 'NoEmptyElt') | ||
<var>Xml</var> function is UTF-8, rather than EBCDIC. | |||
<p class="code">%httpreq object | |||
%httpresp object | |||
%doc object | |||
%httpreq = | |||
%doc = | |||
%doc: | |||
%httpreq:URL = 'foo.com/bar' | %httpreq:[[URL (HttpRequest property)|URL]] = 'foo.com/bar' | ||
%httpreq: | %httpreq:[[AddXml (HttpRequest subroutine)|addXml]](%doc) | ||
%httpresp = %httpreq:Post('HTTP_CLIENT') | %httpresp = %httpreq:[[Post (HttpRequest function)|post]]('HTTP_CLIENT') | ||
</p> | </p> | ||
<li>The following fragment is a simple example for serializing an <var> | <li>The following fragment is a simple example for serializing an <var>XmlDoc</var>, which could then, for example, be sent on a transport such as MQ: | ||
could then, for example, be sent on a transport such as MQ: | <p class="code"> %s longstring | ||
<p class="code">%s | %s = %doc:xml | ||
%s = %doc: | |||
</p> | </p> | ||
</ | </ol> | ||
==Request-cancellation errors== | |||
This list is not exhaustive: it does <i>not</i> include all the errors that are request cancelling. | |||
<ul> | <ul> | ||
<li><var> | <li><var class="term">doc</var> object does not contain an <var>Element</var>. | ||
<li>< | <li>An <var class="term">options</var> setting is invalid. | ||
<li>Insufficient free space exists in CCATEMP. | <li>Insufficient free space exists in CCATEMP. | ||
</ul> | </ul> | ||
==See also== | |||
<ul> | |||
<li>Use <var>[[Print (XmlDoc/XmlNode subroutine)|Print]]</var> to display an XML document for debugging. </li> | |||
<li>Use <var>[[Serial (XmlDoc/XmlNode function)|Serial]]</var> with the EBCDIC option to obtain an EBCDIC serialization of an XML document. </li> | |||
= | <li>Use <var>[[WebSend (XmlDoc subroutine)|WebSend]]</var> to serialize an <var>XmlDoc</var> and send it as an HTTP response using <var class="product">[[Janus Web Server]]</var>. </li> | ||
<li>The string deserialization functions are <var>[[LoadXml (XmlDoc/XmlNode function)|LoadXml]]</var> and <var>[[WebReceive (XmlDoc function)|WebReceive]]</var>. </li> | |||
<li> | |||
< | |||
< | |||
</ul> | </ul> | ||
{{Template:XmlDoc:Xml footer}} |
Latest revision as of 18:06, 9 March 2014
Serialize XmlDoc as UTF-8 string (XmlDoc class)
The Xml function converts an XmlDoc to its textually represented XML document (this process is called serialization, because the text representation of a document is called the serial form).
Syntax
%string = doc:Xml[( [options])]
Syntax terms
%string | The string serialization of the XmlDoc, encoded in UTF-8. |
---|---|
doc | XmlDoc expression, whose content is to be serialized. |
options | A blank delimited string that can contain one or more of the following options (but no repeats).
Note: These options are described in greater detail in "XmlDoc API serialization options".
|
Usage notes
- Options may be specified in any case, for example, you can use either
NoXmlDecl
ornoxmldecl
, interchangeably. - The XmlDoc method object must be well-formed (that is, it must contain an Element node). For more information, see "Well-formed documents and validation".
- Since the result of the Xml function has UTF-8 encoding, you cannot treat it as an EBCDIC string: for example, printing the string will not produce displayable characters. The "See Also" section below mentions some methods for obtaining an EBCDIC serialization of an XmlDoc.
- You can use the Print method to display a document on the terminal, or to capture a displayable version of a document, but Print is used to insert line breaks and optional indentation, which may not be an accurate serialization of an XmlDoc.
- 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.
Examples
- The AddXml method of the HTtpRequest class has nearly the same options as the Xml function. The following fragment serializes an XmlDoc and sends it as a request to a web server.
Note that if you use the Xml function and $Sock_Send directly, instead of using an HTTP Helper object, always use the BINARY option of $Sock_Send, because the result of the Xml function is UTF-8, rather than EBCDIC.
%httpreq object httpRequest %httpresp object httpResponse %doc object xmlDoc %httpreq = new %doc = new %doc:loadXml('<inquire><stock>IBM</stock>' with - <dateRange/></inquire>', 'NoEmptyElt') %httpreq:URL = 'foo.com/bar' %httpreq:addXml(%doc) %httpresp = %httpreq:post('HTTP_CLIENT')
- The following fragment is a simple example for serializing an XmlDoc, which could then, for example, be sent on a transport such as MQ:
%s longstring %s = %doc:xml
Request-cancellation errors
This list is not exhaustive: it does not include all the errors that are request cancelling.
- doc object does not contain an Element.
- An options setting is invalid.
- Insufficient free space exists in CCATEMP.
See also
- Use Print to display an XML document for debugging.
- Use Serial with the EBCDIC option to obtain an EBCDIC serialization of an XML document.
- Use WebSend to serialize an XmlDoc and send it as an HTTP response using Janus Web Server.
- The string deserialization functions are LoadXml and WebReceive.