ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> perl-xml
perl-xml
Re: Error when attempting to use cloneNode - Can't locate object method "cloneNode" via package "XML::DOM::NodeList"
by John Krewson other posts by this author
Jul 25 2007 3:09PM messages near this date
view in the new Beta List Site
Re: Error when attempting to use cloneNode - Can't locate object method "cloneNode" via package "XML::DOM::NodeList" | using XML::LibXML on hp11
& XSLT Thanks for this, but I had already headed down the XML::DOM path and am so
very close I can smell it, although I will check out XML::LibXML later.  I'm
not getting to the data from the source file, it seems, as I get the
following error, Can't call method "setOwnerDocument" on an undefined value,
and my test (if ($node->  getFirstChild->getData eq 'test') {) is failing.

I stole code from the following post, which is EXACTLy what I"m trying to
do, hence I'm fine with using XML:DOM at the moment:
http://aspn.activestate.com/ASPN/Mail/Message/perl-xml/469159

And changed it a bit as posted:

my $xp=new XML::DOM::Parser;
my $doc=$xp->  parsefile("target_files/target.xml");
my $docFrom=$xp->  parsefile("source_files/0,,HGTV_1378264,00.xml");

my $nodes=$docFrom->  getElementsByTagName("Article");
my $snode;
for my $i (0..$nodes->  getLength-1) {
 my $node=$nodes->  item($i);
 if ($node->  getFirstChild->getData eq 'test') {
     print "tis true!";
     print $node->  getFirstChild->getData; #Nothing, I am not hitting what I
think should be the first child node from the source
  $snode=$node->  getParentNode->cloneNode("deep");
  last;
 }
}

$snode->  setOwnerDocument($doc);
my $sitesnode=$doc->  getElementsByTagName("articles")->item(0);
$sitesnode->  appendChild($snode);

$doc->  printToFile("target_files/final_target.xml");

where my docfrom is this:
<?xml version='1.0' encoding='utf-8' ?> 
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://w
ww.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

        <Article> 
        <id> test</id><section>AH RECIPES OTHER</section><create_date>Sep 05
2002
 05:28:12:000AM</create_date> <last_updated_date>May 07 2007
06:41:54:000PM</last
_updated_date> <publication_date>May 24,
2002</publication_date> <headline>Cooking
 with Garlic</headline> <url>
http://www.hgtv.com/hgtv/ah_recipes_other/article/0,
1801,HGTV_3186_1378264,00.html</url> <copyright>Copyright 2007, </copyright>
        </Article> 

and doc is this:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.or
g/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<articles> 
</articles> 









On 7/25/07, James Woodworth <woodworthjames@[...].com>  wrote:
> 
>  Hello John,
> 
>  i recently started using XML::LibXML.  what i did was made a "deep" clone
>  for a set of elements to repeatedly insert the clone onto the end after some
>  modifications to the attributes.  try this:
> 
>  my $cloned_node = $node->cloneNode( 1 );
>  ...then...
>  my $last_node = ( $document->findnodes( '/root_node/plot[last()]' ) )[0];
>  $last_node->addSibling( $cloned_node );
> 
>  reply if you need to insert some whitespace.
> 
>  hth, jim woodworth
> 
>  *John Krewson <jkroogle@[...].com>* wrote:
> 
>  Bjoern,
> 
>  This is my first time using Perl to work with XML in this way, so my
>  reasoning for using XML::DOM is simply based upon some examples I have
>  found. Do you think it would be better to use XML::LibXML when making a copy
>  of data in one file to paste into another?
> 
>  My thought was that cloning the node would be easiest way to simple grab
>  all the content between <Article></Article> so that this data could be
>  pasted into another XML file.  Basically, I have a lot of 'stand alone'
>  files that contain content, and I need to consolidate that content into one
>  main XML file.
> 
>  Ex:
>  a = clone of <Article>nodes between</Article>
>  then
>  paste in between <Articles></Articles> in another file.
> 
>  Thanks very much for your response.
> 
>  On 7/25/07, Bjoern Hoehrmann <derhoermi@[...].net> wrote:
>  >
>  > * John Krewson wrote:
>  > >I am getting the following error when attempting to use cloneNode, in
>  > order
>  > >to clone a node and then paste this node into a target file:
>  > >Can't locate object method "cloneNode" via package "XML::DOM::NodeList"
>  >
>  >
>  > If you have XML::LibXML I don't think there is any reason to use
>  > XML::DOM. As for your problem, getElementsByTagName returns a node
>  > list (zero or more nodes); you are trying a method for a single
>  > node on a list of nodes, you have to clone the nodes one by one.
>  > Not that I am sure why you are trying to clone them in the first
>  > place.
>  > --
>  > Bj�rn H�hrmann � mailto:bjoern@[...].de � http://bjoern.hoehrmann.de
>  >
>  > Weinh. Str. 22 � Telefon: +49(0)621/4309674 � http://www.bjoernsworld.de
>  > 68309 Mannheim � PGP Pub. KeyID: 0xA4357E78 � http://www.websitedev.de/
>  >
> 
>  _______________________________________________
>  Perl-XML mailing list
>  Perl-XML@[...].com
>  To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
> 
> 
>  ------------------------------
>  Looking for a deal? Find great prices on flights and hotels<http://us.rd.yahoo.com/evt=470
94/*http://farechase.yahoo.com/;_ylc=X3oDMTFicDJoNDllBF9TAzk3NDA3NTg5BHBvcwMxMwRzZWMDZ3JvdXB
zBHNsawNlbWFpbC1uY20-> with Yahoo! FareChase.
> 
> 
>  _______________________________________________
>  Perl-XML mailing list
>  Perl-XML@[...].com
>  To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
> 
> 
Thread:
John Krewson
Bjoern Hoehrmann
John Krewson
Richard E. Rathmann
John Krewson
James Woodworth
John Krewson

Privacy Policy | Email Opt-out | Feedback | Syndication
© 2004 ActiveState, a division of Sophos All rights reserved