zericm has asked for the wisdom of the Perl Monks concerning the following question:

All,

I'm having the stupidest problem in the world. I can't get XML::Twig to work. Really, it is XML::Parser, but via twig. Anyways, here is my xml:

<?xml version="1.0" encoding="UTF-8"?> <test>word</test>

That's it.

Here is my script:

#!/usr/bin/perl use strict; use XML::Twig; my $fileLocation = "test.xml"; open(SOURCE, "< $fileLocation") or die "Couldn't open $fileLocation fo +r reading: $!\n"; my $twig = new XML::Twig; $twig->parse($fileLocation);

And here is my error:

syntax error at line 1, column 0, byte 0 at /usr/lib/perl5/XML/Parser. +pm line 187 at ./test.pl line 14

For the life of me, I can't figure out what I'm doing wrong. I've used twig in the past and never had this problem. I thought this might be a perl bug, but I've tried it on both my Mac and an Ubuntu box. No luck!

Love,
Eric

Replies are listed 'Best First'.
Re: XML::Parser Error: invalid doc
by ikegami (Patriarch) on Mar 22, 2009 at 06:09 UTC

    "test.xml" is indeed invalid XML. You want

    $twig->parsefile($fileLocation)
Re: XML::Parser Error: invalid doc
by graff (Chancellor) on Mar 22, 2009 at 14:34 UTC
    To elaborate a bit on what ikegami said: you can either use "parsefile( $filename )", in which case you don't need to open the file yourself, or you can open an input file handle yourself, slurp its contents as a single string into a scalar variable, and use "parse( $xmlstring )".

    I know the XML::Twig manual is terribly long (18,537 words!), but the solution you were looking for turns up in the first few paragraphs...

      Did someone say RTFM?

      Thanks nonetheless!

Re: XML::Parser Error: invalid doc
by mirod (Canon) on Mar 22, 2009 at 18:23 UTC

    AIndeed, you should use parsefile instead of parse in this case.

    A shortcut is also to write directly my $twig= XML::Twig->parse( $fileLocation): in that case XML::Twig figures out that the argument to parse is not XML, so it looks for a file by that name.