AllowNull (XmlDoc property)

From m204wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Allow null characters in node values? (XmlDoc class)

The AllowNull property indicates whether or not the method object XmlDoc allows the deserialization of an XML document that contains nodes that have null characters (U+0000) in their values. A Boolean value of True allows such deserializations. The default value, False, cancels the request if such a deserialization is attempted.

For example, the following Element node is acceptable for deserialization into an XmlDoc (for example, by using LoadXml) only if AllowNull is True:

<a>Element contains null: &#0;</a>

If AllowNull=True, null characters are also allowed for "direct setting" of a node's value using one of the many Add or Insert methods. For example:

%nod:AddElement('a', 'Element contains null:' With $X2C('00'))


%currentBoolean = doc:AllowNull doc:AllowNull = newBoolean

Syntax terms

%currentBoolean The Boolean enumeration value of doc's AllowNull property.
doc An XmlDoc object expression.
newBoolean The Boolean value to assign to doc's AllowNull property.

Usage notes

  • Nodes that are added to an XmlDoc that has AllowNull=True may not then be the source node in a subtree copy (AddSubtree or InsertSubtreeBefore) to a target XmlDoc that has AllowNull=False.
  • All Unicode characters except null can always be stored in an XmlDoc, so setting AllowNull to True means all Unicode characters can be stored. If you were using the now obsolete InvalidChar=Allow setting to allow null characters in an XmlDoc, you can use AllowNull=True instead.
  • Deserialization of Unicode characters that do not translate to EBCDIC is not allowed unless the AllowUntranslatable deserialization option is used.
  • When providing EBCDIC characters to be stored in an XmlDoc, those EBCDIC characters must be translatable to Unicode. If you have EBCDIC strings that may not be translatable, you must handle those before passing them to an XmlDoc update operation. For example, you may be able to use the Untranslatable argument of the EbcdicToUnicode function.
  • A null character in an XmlDoc is serialized as an XML hexadecimal character reference: &#x0;.
  • AllowNull is new as of Sirius Mods Version 7.6.


In the following request, an EBCDIC X'FF' character requires a replacement to avoid request cancellation, but setting AllowNull to True lets a null be added to the XmlDoc.

Begin %d is object xmldoc auto new %n1 is object xmlnode %n2 is object xmlnode %n3 is object xmlnode %txt is string len 32 %uni is unicode %d:loadXml('<zen>The Buddha dog says</zen>') %n1 = %d:selectSingleNode('zen') %txt = 'substitute character is ' with $X2C('FF') %uni = %txt:ebcdicToUnicode(untranslatable='?') %n2 = %n1:addComment(%uni) printText {~} = {%n2:value} %d:allownull = true %n3 = %n1:addElement('a', 'nothingness: ' With $X2C('00')) %d:print end

The result is:

%n2:value = substitute character is ? <zen> The Buddha dog says <!--substitute character is ?--> <a>nothingness: &#x0;</a> </zen>

See also