I think Aditya has a good point here because one Program can have many showings of the same concert which can land on different days and times. If the Times and Dates of these showings are important to the case, I've gone ahead and corrected my workflow to include the additional showings:
I got the data to match except for program ID 12104 piece 7955* - if you look at the interval information this is the second intermission - not sure why it has a piece ID in the XML. my data did not have this line as I stripped out the intermissions but the output does.
Got a little picky on this one with the summarization of composers, conductors, soloists, works & movements - I didn't want to see the same one listed twice in the details if that program had more than 1 of the same work/person. So my results probably don't match exactly, but a cursory review looks pretty decent!