I fixed the compilation problem by changing the perl code generated at the
end_element handler for xsp:element code to:
return '} $parent->appendChild($elem); '. "\n";
from:
return '$parent = $parent->getParentNode;' . "\n";
This is line ~691 in XSP.pm. This gets the xsp page compiling.
Even after this fix, though, I think there's some flaw in the nesting logic
for generating code to create elements in 1.6. When I call a function, it
ends up adding the elements defined by that function to the parent node of
the node I want to add them to. The node to which I thought I was adding new
elements in my function is instead added to the same parent _after_ the
elements generated by my function call.
The 1.6rc3 seems to attempt to localize $parent by doing a "my $parent=$elem"
and leaving the brace open when startig new nodes. However, when a function
is called in that scope, the function call doesn't pick up the my'ed $parent
in the scope from which it's called, but rather picks up the $parent from the
scope in which the function was defined. I don't know if that's expected
behaviour for perl or not?
The line that I deleted ($parent=$parent.getParentNode;) won't affect anything
because of the scoping. If it is inside the right brace, it only affects the
local $parent and sets it to the newly created element ($elem), but the
value will be lost when we go out of the block, right? If it's outside the
brace, there shouldn't be a need to back up one level, because only the local
$parent was changed in the block.
I worked around it by explicitly passing a $parent parameter to my functions.
Everything works as expected now, but I don't know if this is a reasonable
solution. It seems contradictory to the philosophy of blindly embedding tags.
Thanks,
Kevin
1.6rc3 with my fix generates:
my $elem; { $elem = $document->createElement(q|CurrentDirectory|); my
$parent = $elem;
include_file($dir."/DirectoryInfo.xml");
} $parent->appendChild($elem);
and:
sub include_file {
my ($filename)=@_;
my $elem; { $elem = $document->createElement(q|xi:include|);my
$parent = $elem;
$parent->setAttribute(q|xmlns:xi|, "". q|http://www.w3.org/2001/XInclude|);
$parent->setAttribute(q|href|, "". do {$filename});
} $parent->appendChild($elem);
} # end of include_file
1.52 generates:
my $elem; { $elem = $document->createElement(q|CurrentDirectory|); my
$parent = $elem;
include_file($dir."/DirectoryInfo.xml");
} $parent->appendChild($elem);
and:
sub include_file {
my ($filename)=@_;
{ my $elem =
$document->createElement(q|xi:include|);$parent->appendChild($elem); $parent
= $elem; }
$parent->setAttribute(q|xmlns:xi|, "". q|http://www.w3.org/2001/XInclude|);
$parent->setAttribute(q|href|, "". do {$filename});
$parent = $parent->getParentNode;
} # end of include_file
-------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]