This procedure is defined in the server but not documented via ad_proc or proc_doc and may be intended as a private interface.
The procedure is defined as:
proc dom::CreateElement {token name aList args} {
if {[string length $token]} {
array set parent [set $token]
upvar #0 $parent(docArray) docArray
set docArrayName $parent(docArray)
} else {
array set opts $args
upvar #0 $opts(-docarray) docArray
set docArrayName $opts(-docarray)
}
set id node[incr docArray(counter)]
set child ${docArrayName}($id)
# Create the new node
# NB. normally we'd use Node:create here,
# but inline it instead for performance
set docArray($id) [list id $id docArray $docArrayName node:parentNode $token node:childNodes ${docArrayName}var$docArray(counter) node:nodeType element node:nodeName $name node:nodeValue {} element:attributeList ${docArrayName}arr$docArray(counter) ]
# Initialise associated variables
set ${docArrayName}var$docArray(counter) {}
array set ${docArrayName}arr$docArray(counter) $aList
# Update parent record
# Does this element qualify as the document element?
# If so, then has a document element already been set?
if {[string length $token]} {
if {$parent(node:nodeType) eq "documentFragment" } {
if {$parent(id) == $parent(documentFragment:masterDoc)} {
if {[info exists parent(document:documentElement)]
&& [string length $parent(document:documentElement)]
} {
unset docArray($id)
return -code error "document element already exists"
} else {
# Check against document type decl
if {[string length $parent(document:doctype)]} {
array set doctypedecl [set $parent(document:doctype)]
if {$name ne $doctypedecl(doctype:name) } {
return -code error "mismatch between root element type in document type declaration \"$doctypedecl(doctype:name)\" and root element \"$name\""
}
} else {
# Synthesize document type declaration
CreateDocType $token $name {} {}
# Resynchronise parent record
array set parent [set $token]
}
set parent(document:documentElement) $child
set $token [array get parent]
}
}
}
lappend $parent(node:childNodes) $child
}
return $child
}