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
|