Re: XML data structure parsing in Mathematica 6 using patterns

*To*: mathgroup at smc.vnet.net*Subject*: [mg81621] Re: [mg81502] XML data structure parsing in Mathematica 6 using patterns*From*: Daniel Flatin <dflatin at rcn.com>*Date*: Sat, 29 Sep 2007 02:34:14 -0400 (EDT)*References*: <21153656.1190833488110.JavaMail.root@m35> <op.ty94kdkbqu6oor@monster.gateway.2wire.net>

On Sep 26, 2007, at 16:58, DrMajorBob wrote: > I can't WAIT to hear someone explain in what way the documentation > on this is totally clear! > > Until then, I can only observe that Help gives no examples in which > (as in your attempts) PatternSequence is the left-hand side of a > rule, or a pattern (in itself) to be matched. There are only > examples where PatternSequence is inclosed in List or f. (Those are > the only supported Heads, if I'm judging from Help alone, but I > suppose f means "any head".) [ snip ] > You wanted ONLY the time-pairs, which may require something like > > p = {___, a : ({_String, _String} ...), > PatternSequence[XMLElement["start-valid-time", _, {startT_}], > XMLElement["end-valid-time", _, {endT_}]], > b___} :> {a, {startT, endT}, b}; > timeBlock[[3]] //. p > > {{"2007-09-21T20:00:00-04:00", > "2007-09-22T08:00:00-04:00"}, {"2007-09-22T08:00:00-04:00", > "2007-09-22T20:00:00-04:00"}, {"2007-09-22T20:00:00-04:00", > "2007-09-23T08:00:00-04:00"}, {"2007-09-23T08:00:00-04:00", > "2007-09-23T20:00:00-04:00"}, {"2007-09-23T20:00:00-04:00", > "2007-09-24T08:00:00-04:00"}, {"2007-09-24T08:00:00-04:00", > "2007-09-24T20:00:00-04:00"}} > > All this seems to mean that PatternSequence[p1,p2] is not a > pattern, since you can't match anything with it. But anyhead > [PatternSequence[p1,p2]] IS a pattern. That was exactly the insight I needed. Thanks! I also like Chris Chiasson's approach of naming the patterns. That will be useful since this is part of a larger parsing project. > timeBlock /. > XMLElement[ > "time-layout", _, {layoutKeyElement_, > dataElements : > PatternSequence[XMLElement["start-valid-time", __], > XMLElement["end-valid-time", __]] ..}] :> > Partition[{dataElements}[[All, 3, 1]], 2] Dan