AddTopElement (XmlDoc function): Difference between revisions
m (→See also) |
mNo edit summary |
||
Line 1: | Line 1: | ||
{{Template:XmlDoc:AddTopElement subtitle}} | {{Template:XmlDoc:AddTopElement subtitle}} | ||
The <var>AddTopElement </var> [[Notation_conventions_for_methods#Callable_methods|callable]] function adds an | The <var>AddTopElement </var> [[Notation_conventions_for_methods#Callable_methods|callable]] function adds an [[XmlDoc API#XmlDoc node types|Element node]] as the new top-level element of the <var>XmlDoc</var> that is the object method. This makes all the former children of the <var>XmlDoc</var> <var>Root</var> node become children of the new <var>Element</var>. <var>AddTopElement</var> also lets you specify the element namespace URI for the added <var>Element</var>. | ||
==Syntax== | ==Syntax== | ||
{{Template:XmlDoc:AddTopElement syntax}} | {{Template:XmlDoc:AddTopElement syntax}} | ||
===Syntax terms=== | ===Syntax terms=== | ||
<table class="syntaxTable"> | <table class="syntaxTable"> | ||
Line 29: | Line 30: | ||
==Usage notes== | ==Usage notes== | ||
<ul> | <ul> | ||
<li>If a <var class="term">uri</var> argument is specified, the <var>XmlDoc</var>'s <var>[[Namespace (XmlDoc property)|Namespace]]</var> property value must be <var>On</var>. | <li>If a <var class="term">uri</var> argument is specified, the <var>XmlDoc</var>'s <var>[[Namespace (XmlDoc property)|Namespace]]</var> property value must be <var>On</var>.</li> | ||
<li>When you need to change the structure of an XML document and that need can be accomplished with <var>AddTopElement</var>, it is a more efficient approach than using <var>[[AddSubtree_(XmlDoc/XmlNode_function)|AddSubtree]]</var>. See the [[#Examples|example]] below. | |||
<li>When you need to change the structure of an XML document and that need can be accomplished with <var>AddTopElement</var>, it is a more efficient approach than using <var>[[AddSubtree_(XmlDoc/XmlNode_function)|AddSubtree]]</var>. See the [[#Examples|example]] below. </li> | |||
</ul> | </ul> | ||
Line 76: | Line 78: | ||
<ul> | <ul> | ||
<li>The order of the <var>AddTopElement</var> invocations is the reverse of the final order of the elements, that is, the second invocation creates the first element in the final document. | <li>The order of the <var>AddTopElement</var> invocations is the reverse of the final order of the elements, that is, the second invocation creates the first element in the final document. | ||
<li>If you have no need to preserve the original <var>XmlDoc</var>, then both <var>AddTopElement</var> invocations can use <code>%doc</code> as the object method, and the <var>[[DeepCopy_(XmlDoc_function)|DeepCopy]]</var> can be omitted. | <li>If you have no need to preserve the original <var>XmlDoc</var>, then both <var>AddTopElement</var> invocations can use <code>%doc</code> as the object method, and the <var>[[DeepCopy_(XmlDoc_function)|DeepCopy]]</var> can be omitted. | ||
<li>The redundant namespace declaration on the <code>soap:Body</code> element above would be deleted if the <code>MoveNamespace=True</code> argument is used, although usually the redundant declaration is acceptable and <var>MoveNamespace</var> should be avoided. | <li>The redundant namespace declaration on the <code>soap:Body</code> element above would be deleted if the <code>MoveNamespace=True</code> argument is used, although usually the redundant declaration is acceptable and <var>MoveNamespace</var> should be avoided. | ||
</ul> | </ul> | ||
===Add unprefixed SOAP wrappers=== | ===Add unprefixed SOAP wrappers=== | ||
The following example is similar, except that the SOAP elements use a default namespace declaration. <var>AddTopElement</var> only allows this when the old top element is in a default namespace (here <code>http:mydata</code>). Note that this example requires <var class="product">[[Sirius Mods|Sirius Mods]]</var> Version 7.9 or greater. | The following example is similar, except that the SOAP elements use a default namespace declaration. <var>AddTopElement</var> only allows this when the old top element is in a default namespace (here <code>http:mydata</code>). Note that this example requires <var class="product">[[Sirius Mods|Sirius Mods]]</var> Version 7.9 or greater. | ||
Line 132: | Line 137: | ||
<li>For more information about namespace declarations, see [[XML_processing_in_Janus_SOAP#Names_and_namespaces|"Names and namespaces"]]. | <li>For more information about namespace declarations, see [[XML_processing_in_Janus_SOAP#Names_and_namespaces|"Names and namespaces"]]. | ||
<li>For more information about URIs, see [[XML_processing_in_Janus_SOAP#Uniform_Resource_Identifier_syntax|"Uniform Resource Identifier syntax"]]. | <li>For more information about URIs, see [[XML_processing_in_Janus_SOAP#Uniform_Resource_Identifier_syntax|"Uniform Resource Identifier syntax"]]. | ||
<li><var>[[AddElement (XmlDoc/XmlNode function)|AddElement]]</var> and <var>[[InsertElementBefore (XmlNode function)|InsertElementBefore]]</var> also add an <var>Element</var> node. <var>AddElement</var> adds an <var>Element</var> as the last child of the node pointed to by the method object; <var>InsertElementBefore</var> adds an <var>Element</var> as the immediately preceding sibling of the node pointed to by the method object. | <li><var>[[AddElement (XmlDoc/XmlNode function)|AddElement]]</var> and <var>[[InsertElementBefore (XmlNode function)|InsertElementBefore]]</var> also add an <var>Element</var> node. <var>AddElement</var> adds an <var>Element</var> as the last child of the node pointed to by the method object; <var>InsertElementBefore</var> adds an <var>Element</var> as the immediately preceding sibling of the node pointed to by the method object. | ||
<li>The <var>[[DeleteTopElement (XmlDoc subroutine)|DeleteTopElement]]</var> subroutine removes the top <var>Element</var> from an <var>XmlDoc</var>. | <li>The <var>[[DeleteTopElement (XmlDoc subroutine)|DeleteTopElement]]</var> subroutine removes the top <var>Element</var> from an <var>XmlDoc</var>. | ||
<li>These methods are useful for working with namespaces: | <li>These methods are useful for working with namespaces: | ||
<ul> | <ul> | ||
Line 140: | Line 148: | ||
</ul> | </ul> | ||
</ul> | </ul> | ||
{{Template:XmlDoc:AddTopElement footer}} | {{Template:XmlDoc:AddTopElement footer}} |
Revision as of 17:07, 3 March 2014
Add new top element to XmlDoc (XmlDoc class)
[Introduced in Sirius Mods 7.7; requires Janus SOAP]
The AddTopElement callable function adds an Element node as the new top-level element of the XmlDoc that is the object method. This makes all the former children of the XmlDoc Root node become children of the new Element. AddTopElement also lets you specify the element namespace URI for the added Element.
Syntax
[%nod =] doc:AddTopElement( name, [uri], [MoveNamespace= boolean])
Syntax terms
%nod | If specified, an XmlNode that is set to point to the new top Element node that is added. |
---|---|
doc | An XmlDoc object variable. |
name | The name (a Unicode string) to be given to the added Element. If the name is prefixed, a uri argument must be provided. The name must conform to the XML syntax rules for an element name; the maximum length of each of the prefix part and local name part is 300 characters (127 characters prior to version 7.9, and 100 characters prior to version 7.7). |
uri | This optional, Unicode string, argument defaults to the null string:
|
MoveNamespace | This optional, name required argument is used to avoid a redundant namespace declaration on the old top element of the XmlDoc. If MoveNamespace=True and a uri argument (with a non-null string) is provided, then if the "old" top element contains a namespace declaration which is the same as the declaration inserted due to the uri argument, the declaration is deleted from the old top element.
Note: You should use MoveNamespace is available as of Sirius Mods version 7.8. |
Usage notes
- If a uri argument is specified, the XmlDoc's Namespace property value must be On.
- When you need to change the structure of an XML document and that need can be accomplished with AddTopElement, it is a more efficient approach than using AddSubtree. See the example below.
Examples
Add prefixed SOAP wrappers
The following request makes a copy of an XML document, then adds "SOAP wrappers" to it:
begin %doc is object xmlDoc %doc2 is object xmlDoc %doc = new %doc:loadXml('<top><a></a></top>') Call %doc:print print '*********************' %doc2 = %doc:DeepCopy %doc2:addTopElement('soap:Body', - 'http://schemas.xmlsoap.org/soap/envelope/') %doc2:addTopElement('soap:Envelope', - 'http://schemas.xmlsoap.org/soap/envelope/') call %doc2:print end
The result is:
<top> <a> <b/> </a> </top> ********************* <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <top> <a> <b/> </a> </top> </soap:Body> </soap:Envelope>
In the example:
- The order of the AddTopElement invocations is the reverse of the final order of the elements, that is, the second invocation creates the first element in the final document.
- If you have no need to preserve the original XmlDoc, then both AddTopElement invocations can use
%doc
as the object method, and the DeepCopy can be omitted. - The redundant namespace declaration on the
soap:Body
element above would be deleted if theMoveNamespace=True
argument is used, although usually the redundant declaration is acceptable and MoveNamespace should be avoided.
Add unprefixed SOAP wrappers
The following example is similar, except that the SOAP elements use a default namespace declaration. AddTopElement only allows this when the old top element is in a default namespace (here http:mydata
). Note that this example requires Sirius Mods Version 7.9 or greater.
begin %doc is object xmlDoc %doc2 is object xmlDoc %doc = new %doc:loadXml('<top xmlns="http:mydata"><a></a></top>') call %doc:print print '*********************' %doc2 = %doc:deepCopy %doc2:addTopElement('Body', - 'http://schemas.xmlsoap.org/soap/envelope/') %doc2:addTopElement('Envelope', - 'http://schemas.xmlsoap.org/soap/envelope/') call %doc2:print end
The result is:
<top xmlns="http:mydata"> <a> <b/> </a> </top> ********************* <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <top xmlns="http:mydata"> <a> <b/> </a> </top> </Body> </Envelope>
Request-cancellation errors
- The name argument violates the rules for an XML element name.
- name is prefixed, but the XmlDoc Namespace property value is None.
- name is prefixed and Namespace is On, but uri is missing.
- The uri argument is invalid.
- uri is present, but the Namespace property value is not On, or, uri is the null string and name is prefixed.
- Insufficient free space exists in CCATEMP.
See also
- For more information about namespace declarations, see "Names and namespaces".
- For more information about URIs, see "Uniform Resource Identifier syntax".
- AddElement and InsertElementBefore also add an Element node. AddElement adds an Element as the last child of the node pointed to by the method object; InsertElementBefore adds an Element as the immediately preceding sibling of the node pointed to by the method object.
- The DeleteTopElement subroutine removes the top Element from an XmlDoc.
- These methods are useful for working with namespaces: