Correction: Re: [xquery-talk] XQuery function to do
elementX/not-elementX chunking?
David Sewell
dsewell at virginia.edu
Tue Sep 13 17:28:42 PDT 2005
On Tue, 13 Sep 2005, Jason Hunter wrote:
> Are the <ref> elements only at the top level in the sequence? If they're
> under other elements, what behavior do you want?
For the purposes of my query, only child nodes need to be handled (in
actual practice, the function that processes <ref>s will be called
recursively).
> -jh-
>
> David Sewell wrote:
>
> > Someone will object that the sequence of sequences I claimed was my
> > goal will be flattened. What I really want as output is something like
> >
> > <span>This text has <i>italics</i> and</span>
> > <span>an embedded ref</span>
> >
> > so I'm really looking sequentially for node sequences defined as either
> > (1) a single <ref> or (2) a sequence of one or more non-<ref> nodes.
> >
> > On Tue, 13 Sep 2005, David Sewell wrote:
> >
> >
> > > Given an XML element like this:
> > >
> > > <ref>This text has <i>italics</i> and <ref>an embedded ref</ref> and
> > > more text including <b>boldface</b> and <ref>another ref</ref>
> > > and a bit more text.</ref>
> > >
> > > I want to break this into a sequence of sequences of its node children
> > > like so (with text nodes represented as strings, ignoring linebreaks):
> > >
> > > (
> > > ( 'This text has ', <i>italics</i>, ' and ' ) ,
> > > <ref>an embedded ref</ref>,
> > > ( ' and more text including ', <b>boldface</b>, ' and ' ),
> > > <ref>another ref</ref>,
> > > 'and a bit more text.'
> > > )
> > >
> > > In other words, pull out alternating sequences of (1) <ref> elements and
> > > (2) other nodes that are not <ref> elements. (The practical application is
> > > so that the <ref>s can be transformed into HTML <span>s without
> > > permitting embedded <spans>s -- they are HTML-legal but cause certain
> > > problems.)
> > >
> > > I was able to do this by writing a 10-line function that relies on a
> > > fairly clunky process of selecting all the <ref> children and then
> > > chunking the other nodes that precede and/or follow them; it relies on
> > > some fairly ugly use of preceding-sibling(), following-sibling(),
> > > name(), and the '>>' operator. It's so ugly that I don't want to inflict
> > > it this list (unless someone insists).
> > >
> > > Does anyone have a simple, elegant way to do this?
> > >
> > >
> >
> >
> _______________________________________________
> talk at xquery.com
> http://xquery.com/mailman/listinfo/talk
>
--
David Sewell, Editorial and Technical Manager
Electronic Imprint, The University of Virginia Press
PO Box 400318, Charlottesville, VA 22904-4318 USA
Courier: 310 Old Ivy Way, Suite 302, Charlottesville VA 22903
Email: dsewell at virginia.edu Tel: +1 434 924 9973
Web: http://www.ei.virginia.edu/
More information about the talk
mailing list