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