Hello! I am new to xml and have been tasked with formatting some xml input into a csv file. This is a snippet of the xml file:
<?xml version="1.0" encoding="UTF-8"?> <results> <document id="\2006\200601\20060125\20060125_18.txt" datetime="2006/01/25" sourcecategory="News Archive" schemeversion="1.1"> </document> <document id="\2006\200601\20060125\20060125_19.txt" datetime="2006/01/25" sourcecategory="News Archive" schemeversion="1.1"> <record> <sentence-number>3</sentence-number> <data-class>Target</data-class> <group>P6</group> </record> <record> <sentence-number>12</sentence-number> <data-class>Good</data-class> <group>P6</group> </record> </document> </results>,
Using this code I am able to print out the data listed WITHIN the <document> tag. :
!/usr/bin/perl # open an output file unless (open (OUTFILE, ">testoutput.xml")){ die ("Cannot open output file testoutput.xml\n"); } use XML::Simple; my $file = "infile.xml"; my $xs1 = XML::Simple->new(); my $doc = $xs1->XMLin($file); foreach my $key (keys (%{$doc->{document}})){ print $doc->{document}->{$key}->{'datetime'}, ",", '(' . $key . ')', ",", $doc->{document}->{$key}->{sourcecategory}, ",", $doc->{document}->{$key}->{schemeversion}, ",", "\n"; }
I get something like: 2006/01/25,\2006\200601\20060125\20060125_18.txt,News Archive,1.1 which is perfect. but I have NO IDEA how to get at the second level of data held inside the <record> tags. Some of the <document>s have them and some don't, and the ones that do have <record> tags could have any number of them (1, 2, 7, 14, etc.). Can anyone help me access them? I'd like to print a line for each <record> that also lists the information contained in the corresponding <document>. In theory I'd like it to look like this:
2006/01/25,\2006\200601\20060125\20060125_18.txt,News Archive,1.1 2006/01/25,\2006\200601\20060125\20060125_19.txt,News Archive,1.1,3,Ta +rget,P6 2006/01/25,\2006\200601\20060125\20060125_19.txt,News Archive,1.1,12,G +ood,P6
I hope someone can help! Thanks, Hans

In reply to XML parsing question by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.