Reading Xml files
gzayzay
created: 2006-03-02 10:02:08
Dear Monks,

I am working on reading the contents of xml files. However, I do not want to use the xml parser module. My task is to search within a xml file and look to see if the file contains a particular words.

Example:

A file may have a tag Hello World , if I am opennig all xml files to search for "Hello", How do i code in perl to be able to search between the tag edman or any tag to see if it contains "Hello" considering that infomation b/w tags can extend over several lines. Note that I will not be using the xml parser module.

Thanks for your assistance.

Edman

Re: Reading Xml files
created: 2006-03-02 10:12:53
Of course, you can treat these files as a normal text files and use regexps to find what do you want... But I forewarn to use regexps in this job. I am afraid that you really want some xml parser, which helps you with entities, for instance...
Re: Reading Xml files
created: 2006-03-02 10:13:55

Very interesting question and nice home work. Where is the code to assist you? You just start with perlopen, perlfunc and perlre.

Also take a look at node 172086.

Prasad

Re^2: Reading Xml files
created: 2006-03-02 10:49:25
Thanks for the reference page. It help me learn a lot of Do's and Don'ts
Re: Reading Xml files
created: 2006-03-02 10:15:44

Sounds to me like you're looking for XPath. See XML::XPath or XML::LibXML.

--
<http://dave.org.uk>

"The first rule of Perl club is you do not talk about Perl club."
-- Chip Salzenberg

Re^2: Reading Xml files
created: 2006-03-02 10:23:57

Or xml_grep2:

xml_grep2 -l '//edman[.="Hello"]' *.xml
Re: Reading Xml files
created: 2006-03-02 10:17:34
I do not want to use the xml parser module x2

Why? (And what is "the xml parser module" (there are quite a few modules in the XML namespace, several of them being parsers)).

Sorry to sound like a purist, but there are very good reasons to use an XML parser to process XML (see node 46601 for example). The usual reasons NOT to use one are speed, which can be a good reason, problems with installing the modules, which can often be solved, and just wanting a quick'n dirty solution, which is often not a good reason, as an XML processing module can be easier to use than writing regexps. And besides if I don't try to sell (well, give...) you an XML processing module, who will? ;--)

Re^2: Reading Xml files
created: 2006-03-02 10:42:56
I will like to share this code with other users. thus if the person don't have XML::Parser installed the code will not work. To me, except the XML::Parser is a core module, every other person using my code will have to install it before getting my code to work as desired. I am trying to have a lot of flexibility in code so that there are not a lot of constrains to get my code to work. that is why I don't want to use the XML::Parser. I will love it to make my task easier but that will make my script to not be as portable
Re^3: Reading Xml files
created: 2006-03-02 10:50:39

OR you could distribute XML::Parser with your code.

Re^3: Reading Xml files
created: 2006-03-02 10:52:38
You can distribute your application with all requirede modules with PAR. A tutorial can be found here.

Igor 'izut' Sutton
your code, your rules.

Re^3: Reading Xml files
created: 2006-03-02 11:24:09

XML::Parser is pre-installed with Activestate Perl (it is used by ppm), so even if it's not core, it comes pre-installed on the one platform where installation can be a problem. Note that XML::Twig, which doesn't come with Activestate perl is not too hard to install, as you could just drop the Twig.pm file in the module XML directory. Of course it is a pretty big file these days at nearly 400K. I think that XML::Simple is also a single file, so that is an other option. Oh, and remember that XML::Parser needs expat installed (once again installed with Activestate Perl, and easy enough to install on most other systems)

There are also nearly-complete XML parsers in pure perl: XML::SAX::PurePerl and XML::Parser::Lite, which comes with SOAP::Lite. XML::SAX::PurePerl requires you to then install some SAX modules to do anything interesting with it, but XML::Parser::Lite emulates quite well XML::Parser, so you could ship it with your application and use it as a fallback if XML::Parser is not available. It doesn't parse DTDs, which may or may not be a problem.

Re^4: Reading Xml files
created: 2006-03-02 11:39:02
Thanks a lot for this info. I will try and see how I can get it to work. This infor was very helpful. Thanks to all the monks for their assistance.

Edman

perlmonks.org content © perlmonks.org and davorg, duff, gzayzay, izut, mirod, pajout, prasadbabu

prlmnks.org © 2006 edmund von der burg (eccles & toad)

v 0.03