[PHP5 & DOM] element extracted from doc suddenly not found in insertBefore() -- NS problem

This is a discussion on [PHP5 & DOM] element extracted from doc suddenly not found in insertBefore() -- NS problem within the PHP Language forums, part of the PHP Programming Forums category; Code and problem are from PHP5: When I execute the following piece of code, the DomException is thrown with a ...


Go Back   Usenet Forums > PHP Programming Forums > PHP Language

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 12-01-2004
Rutger Claes
 
Posts: n/a
Default [PHP5 & DOM] element extracted from doc suddenly not found in insertBefore() -- NS problem

Code and problem are from PHP5:

When I execute the following piece of code, the DomException is thrown with
a message: Not Found Exception.
I assume this means that the node I extracted from the DomDocument using
getElementsByTagName() isn't found when I use insertBefore(). I blame the
namespace :-)
When I replace the getElementsByTagName( 'xsl:template' ), I get the "no
template tag found message" in the else.
What is the NS-safe way to insert a xsl:param tag before the xsl:template
tags?

<?php

$xsl = <<<XSL
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:import href="xhtml/basic.xhtml.xsl" />
<xsl:import href="xhtml/search.xhtml.xsl" />
<xsl:import href="xhtml/news.xhtml.xsl" />

<xsl:output
method="xml"
omit-xml-declaration="no"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
indent="yes"
media-type="text/html"
/>

<xsl:param name="updatetime" />

<xsl:template match="/">
<xsl:apply-imports />
</xsl:template>

</xsl:stylesheet>
XSL;

$stylesheet = DomDocument::loadXML( $xsl );
$temp_list = $stylesheet->getElementsByTagName( 'template' );
if( $temp_list && $temp_list->item(0) ) {
$template = $temp_list->item(0);
$param = $stylesheet->createElement( 'xsl:param' );
try {
$stylesheet->insertBefore( $param, $template );
} catch( DomException $e ) {
print "Exception ".$e->getMessage();
print "\n";
print $template->tagName;
}

}
else {
die( "No template tag found" );
}
?>

Thanks in advance.
Rutger Claes
--
Rutger Claes rgc@rgc.tld
Replace tld with top level domain of belgium to contact me pgp:0x3B7D6BD6
Overflow on /dev/null, please empty the bit bucket.

Reply With Quote
  #2 (permalink)  
Old 12-01-2004
konsu
 
Posts: n/a
Default Re: [PHP5 & DOM] element extracted from doc suddenly not found in insertBefore() -- NS problem

there must be a method similar to createElement() which creates an element
in a given namespace. also check out
http://us2.php.net/manual/en/functio...ytagnamens.php

konstantin

"Rutger Claes" <rgc@rgc.tld-of-belgium> wrote in message
news:1101891341.571656@seven.kulnet.kuleuven.ac.be ...
> Code and problem are from PHP5:
>
> When I execute the following piece of code, the DomException is thrown
> with
> a message: Not Found Exception.
> I assume this means that the node I extracted from the DomDocument using
> getElementsByTagName() isn't found when I use insertBefore(). I blame the
> namespace :-)
> When I replace the getElementsByTagName( 'xsl:template' ), I get the "no
> template tag found message" in the else.
> What is the NS-safe way to insert a xsl:param tag before the xsl:template
> tags?
>
> <?php
>
> $xsl = <<<XSL
> <?xml version="1.0" ?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:import href="xhtml/basic.xhtml.xsl" />
> <xsl:import href="xhtml/search.xhtml.xsl" />
> <xsl:import href="xhtml/news.xhtml.xsl" />
>
> <xsl:output
> method="xml"
> omit-xml-declaration="no"
> doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
> indent="yes"
> media-type="text/html"
> />
>
> <xsl:param name="updatetime" />
>
> <xsl:template match="/">
> <xsl:apply-imports />
> </xsl:template>
>
> </xsl:stylesheet>
> XSL;
>
> $stylesheet = DomDocument::loadXML( $xsl );
> $temp_list = $stylesheet->getElementsByTagName( 'template' );
> if( $temp_list && $temp_list->item(0) ) {
> $template = $temp_list->item(0);
> $param = $stylesheet->createElement( 'xsl:param' );
> try {
> $stylesheet->insertBefore( $param, $template );
> } catch( DomException $e ) {
> print "Exception ".$e->getMessage();
> print "\n";
> print $template->tagName;
> }
>
> }
> else {
> die( "No template tag found" );
> }
> ?>
>
> Thanks in advance.
> Rutger Claes
> --
> Rutger Claes rgc@rgc.tld
> Replace tld with top level domain of belgium to contact me
> pgp:0x3B7D6BD6
> Overflow on /dev/null, please empty the bit bucket.
>



Reply With Quote
  #3 (permalink)  
Old 12-02-2004
Rutger Claes
 
Posts: n/a
Default Re: [PHP5 & DOM] element extracted from doc suddenly not found in insertBefore() -- NS problem

konsu wrote:

> there must be a method similar to createElement() which creates an element
> in a given namespace. also check out
>

http://us2.php.net/manual/en/functio...ytagnamens.php
>
> konstantin
>


If you replace the code with all the ...NS() functions the result is
identical. The problem is that when you extract a node from the document
and use it to insert another, the node suddenly is not found.

New code:
$xml = DomDocument::loadXML( $xsl );

$t_list =
$xml->getElementsByTagnameNS( 'http://www.w3.org/1999/XSL/Transform',
'template' );
if( $t_list && $t_list->item(0) ) {
print $t_list->item(0)->tagName;

$new_tag = $xml->createElementNS( 'http://www.w3.org/1999/XSL/Transform',
'param' );
try {
$xml->insertBefore( $new_tag, $t_list->item(0) );
print $xml->saveXML();
} catch( DomException $e ) {
print $e->getMessage();
}
}
else {
die( "No tags found" );
}

xsl stays the same.
This still gives "Not found error"

Is this a bug in the PHP5 DOM implementation?

> "Rutger Claes" <rgc@rgc.tld-of-belgium> wrote in message
> news:1101891341.571656@seven.kulnet.kuleuven.ac.be ...
>> Code and problem are from PHP5:
>>
>> When I execute the following piece of code, the DomException is thrown
>> with
>> a message: Not Found Exception.
>> I assume this means that the node I extracted from the DomDocument using
>> getElementsByTagName() isn't found when I use insertBefore(). I blame
>> the namespace :-)
>> When I replace the getElementsByTagName( 'xsl:template' ), I get the "no
>> template tag found message" in the else.
>> What is the NS-safe way to insert a xsl:param tag before the xsl:template
>> tags?
>>
>> <?php
>>
>> $xsl = <<<XSL
>> <?xml version="1.0" ?>
>> <xsl:stylesheet version="1.0"
>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>>
>> <xsl:import href="xhtml/basic.xhtml.xsl" />
>> <xsl:import href="xhtml/search.xhtml.xsl" />
>> <xsl:import href="xhtml/news.xhtml.xsl" />
>>
>> <xsl:output
>> method="xml"
>> omit-xml-declaration="no"
>> doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
>> indent="yes"
>> media-type="text/html"
>> />
>>
>> <xsl:param name="updatetime" />
>>
>> <xsl:template match="/">
>> <xsl:apply-imports />
>> </xsl:template>
>>
>> </xsl:stylesheet>
>> XSL;
>>
>> $stylesheet = DomDocument::loadXML( $xsl );
>> $temp_list = $stylesheet->getElementsByTagName( 'template' );
>> if( $temp_list && $temp_list->item(0) ) {
>> $template = $temp_list->item(0);
>> $param = $stylesheet->createElement( 'xsl:param' );
>> try {
>> $stylesheet->insertBefore( $param, $template );
>> } catch( DomException $e ) {
>> print "Exception ".$e->getMessage();
>> print "\n";
>> print $template->tagName;
>> }
>>
>> }
>> else {
>> die( "No template tag found" );
>> }
>> ?>
>>
>> Thanks in advance.
>> Rutger Claes
>> --
>> Rutger Claes rgc@rgc.tld
>> Replace tld with top level domain of belgium to contact me
>> pgp:0x3B7D6BD6
>> Overflow on /dev/null, please empty the bit bucket.
>>


--
Rutger Claes rgc@rgc.tld
Replace tld with top level domain of belgium to contact me pgp:0x3B7D6BD6
Long computations which yield zero are probably all for naught.

Reply With Quote
  #4 (permalink)  
Old 12-02-2004
konsu
 
Posts: n/a
Default Re: [PHP5 & DOM] element extracted from doc suddenly not found in insertBefore() -- NS problem

here is something that does not fail but it shows no output for saveXML. i
did not spend time trying to figure out why.

$xml = new DOMDocument;
$xml->loadXML($xsl);

$t_list = $xml->getElementsByTagnameNS(
'http://www.w3.org/1999/XSL/Transform','template' );
if( $t_list && $t_list->item(0) )
{
echo($xml->documentElement->tagName);
$new_tag = $xml->createElementNS(
'http://www.w3.org/1999/XSL/Transform','param' );
try
{
$xml->documentElement->insertBefore( $new_tag, $t_list->item(0) );
echo($xml->saveXML());
}
catch( DomException $e )
{
echo($e->getMessage());
}
}
else
{
die( "No tags found" );
}



"Rutger Claes" <rgc@rgc.tld-of-belgium> wrote in message
news:1102003188.895445@seven.kulnet.kuleuven.ac.be ...
> konsu wrote:
>
>> there must be a method similar to createElement() which creates an
>> element
>> in a given namespace. also check out
>>

> http://us2.php.net/manual/en/functio...ytagnamens.php
>>
>> konstantin
>>

>
> If you replace the code with all the ...NS() functions the result is
> identical. The problem is that when you extract a node from the document
> and use it to insert another, the node suddenly is not found.
>
> New code:
> $xml = DomDocument::loadXML( $xsl );
>
> $t_list =
> $xml->getElementsByTagnameNS( 'http://www.w3.org/1999/XSL/Transform',
> 'template' );
> if( $t_list && $t_list->item(0) ) {
> print $t_list->item(0)->tagName;
>
> $new_tag = $xml->createElementNS( 'http://www.w3.org/1999/XSL/Transform',
> 'param' );
> try {
> $xml->insertBefore( $new_tag, $t_list->item(0) );
> print $xml->saveXML();
> } catch( DomException $e ) {
> print $e->getMessage();
> }
> }
> else {
> die( "No tags found" );
> }
>
> xsl stays the same.
> This still gives "Not found error"
>
> Is this a bug in the PHP5 DOM implementation?
>
>> "Rutger Claes" <rgc@rgc.tld-of-belgium> wrote in message
>> news:1101891341.571656@seven.kulnet.kuleuven.ac.be ...
>>> Code and problem are from PHP5:
>>>
>>> When I execute the following piece of code, the DomException is thrown
>>> with
>>> a message: Not Found Exception.
>>> I assume this means that the node I extracted from the DomDocument using
>>> getElementsByTagName() isn't found when I use insertBefore(). I blame
>>> the namespace :-)
>>> When I replace the getElementsByTagName( 'xsl:template' ), I get the "no
>>> template tag found message" in the else.
>>> What is the NS-safe way to insert a xsl:param tag before the
>>> xsl:template
>>> tags?
>>>
>>> <?php
>>>
>>> $xsl = <<<XSL
>>> <?xml version="1.0" ?>
>>> <xsl:stylesheet version="1.0"
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>>>
>>> <xsl:import href="xhtml/basic.xhtml.xsl" />
>>> <xsl:import href="xhtml/search.xhtml.xsl" />
>>> <xsl:import href="xhtml/news.xhtml.xsl" />
>>>
>>> <xsl:output
>>> method="xml"
>>> omit-xml-declaration="no"
>>> doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
>>> indent="yes"
>>> media-type="text/html"
>>> />
>>>
>>> <xsl:param name="updatetime" />
>>>
>>> <xsl:template match="/">
>>> <xsl:apply-imports />
>>> </xsl:template>
>>>
>>> </xsl:stylesheet>
>>> XSL;
>>>
>>> $stylesheet = DomDocument::loadXML( $xsl );
>>> $temp_list = $stylesheet->getElementsByTagName( 'template' );
>>> if( $temp_list && $temp_list->item(0) ) {
>>> $template = $temp_list->item(0);
>>> $param = $stylesheet->createElement( 'xsl:param' );
>>> try {
>>> $stylesheet->insertBefore( $param, $template );
>>> } catch( DomException $e ) {
>>> print "Exception ".$e->getMessage();
>>> print "\n";
>>> print $template->tagName;
>>> }
>>>
>>> }
>>> else {
>>> die( "No template tag found" );
>>> }
>>> ?>
>>>
>>> Thanks in advance.
>>> Rutger Claes
>>> --
>>> Rutger Claes rgc@rgc.tld
>>> Replace tld with top level domain of belgium to contact me
>>> pgp:0x3B7D6BD6
>>> Overflow on /dev/null, please empty the bit bucket.
>>>

>
> --
> Rutger Claes rgc@rgc.tld
> Replace tld with top level domain of belgium to contact me
> pgp:0x3B7D6BD6
> Long computations which yield zero are probably all for naught.
>



Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 08:02 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0