Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   XML (http://www.velocityreviews.com/forums/f32-xml.html)
-   -   help using XSLT in parsing nested xml trees (http://www.velocityreviews.com/forums/t495001-help-using-xslt-in-parsing-nested-xml-trees.html)

binary_sunset@yahoo.com 03-29-2007 09:49 PM

help using XSLT in parsing nested xml trees
 
Okay... so this may be all to obvious to all except myself, but I am
having some difficulty with XML output from Adobe InDesign. Each
separate article in my publication is tagged as an article, with a
component tree, but the articles all appear in the XML output as child
nodes of the previous article ala:

<article>
<title/>
<date/>
<body/>
<article>
<title/>
<date/>
<body/>
<article>
<title/>
<date/>
<body/>
</article>
</article>
</article>

The desired output from an XSLT would be something like three separate
files (easy) with the structure:

<article>
<title/>
<date/>
<body/>
</article>

or at least:

<article>
<title/>
<date/>
<body/>
</article>
<article>
<title/>
<date/>
<body/>
</article>
<article>
<title/>
<date/>
<body/>
</article>

So how do I parse the output? It looks like a recursive process, as
the number of nestings will vary with the number of articles in the
signature, and by magazine. The idea of attaching an attribute
<article id="n"> to each article occurred to me, but this changes the
workflow somewhat, as ids were to be established in post-processing,
rather than by hand.

Thanks.
Michael C.
Light Technology Publishing


p.lepin@ctncorp.com 03-30-2007 07:19 AM

Re: help using XSLT in parsing nested xml trees
 
On Mar 30, 12:49 am, binary_sun...@yahoo.com wrote:
> <article>
> <title/>
> <date/>
> <body/>
> <article>
> <title/>
> <date/>
> <body/>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
> </article>
> </article>
>
> The desired output from an XSLT would be something like
> three separate files (easy) with the structure:


Unless I'm much mistaken, XSLT1 cannot produce several
result trees in one pass. For that matter, I'm not sure it
can be done with EXSLT; and XSLT2 implementations are not
that common yet.

> or at least:
>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
>
> So how do I parse the output? It looks like a recursive
> process, as the number of nestings will vary with the
> number of articles in the signature, and by magazine. The
> idea of attaching an attribute <article id="n"> to each
> article occurred to me, but this changes the workflow
> somewhat, as ids were to be established in
> post-processing, rather than by hand.


Perhaps I'm missing something, but unnesting the structure
described seems trivial enough to me:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<unnested-articles>
<xsl:apply-templates select="//article"/>
</unnested-articles>
</xsl:template>
<xsl:template match="article">
<xsl:copy>
<xsl:apply-templates
select="@*|node()" mode="clone"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" mode="clone">
<xsl:copy>
<xsl:apply-templates
select="@*|node()" mode="clone"/>
</xsl:copy>
</xsl:template>
<xsl:template match="article" mode="clone"/>
</xsl:stylesheet>

--
Pavel Lepin


Simon Brooke 03-30-2007 08:42 AM

Re: help using XSLT in parsing nested xml trees
 
in message <1175204963.402701.51580@n59g2000hsh.googlegroups. com>,
binary_sunset@yahoo.com ('binary_sunset@yahoo.com') wrote:

> Okay... so this may be all to obvious to all except myself, but I am
> having some difficulty with XML output from Adobe InDesign. Each
> separate article in my publication is tagged as an article, with a
> component tree, but the articles all appear in the XML output as child
> nodes of the previous article ala:
>
> <article>
> <title/>
> <date/>
> <body/>
> <article>
> <title/>
> <date/>
> <body/>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
> </article>
> </article>
>
> The desired output from an XSLT would be something like three separate
> files (easy) with the structure:
>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
>
> or at least:
>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
> <article>
> <title/>
> <date/>
> <body/>
> </article>
>
> So how do I parse the output? It looks like a recursive process, as
> the number of nestings will vary with the number of articles in the
> signature, and by magazine. The idea of attaching an attribute
> <article id="n"> to each article occurred to me, but this changes the
> workflow somewhat, as ids were to be established in post-processing,
> rather than by hand.


<xsl:template match="//article">

--
simon@jasmine.org.uk (Simon Brooke) http://www.jasmine.org.uk/~simon/

;; Women are from Venus. Men are from Mars. Lusers are from Uranus.

binary_sunset@yahoo.com 04-02-2007 03:15 PM

Re: help using XSLT in parsing nested xml trees
 
On Mar 30, 12:19 am, p.le...@ctncorp.com wrote:
> On Mar 30, 12:49 am, binary_sun...@yahoo.com wrote:
>
>
>
> > <article>
> > <title/>
> > <date/>
> > <body/>
> > <article>
> > <title/>
> > <date/>
> > <body/>
> > <article>
> > <title/>
> > <date/>
> > <body/>
> > </article>
> > </article>
> > </article>

>
> > The desired output from an XSLT would be something like
> > three separate files (easy) with the structure:

>
> Unless I'm much mistaken, XSLT1 cannot produce several
> result trees in one pass. For that matter, I'm not sure it
> can be done with EXSLT; and XSLT2 implementations are not
> that common yet.
>
>
>
> > or at least:

>
> > <article>
> > <title/>
> > <date/>
> > <body/>
> > </article>
> > <article>
> > <title/>
> > <date/>
> > <body/>
> > </article>
> > <article>
> > <title/>
> > <date/>
> > <body/>
> > </article>

>
> > So how do I parse the output? It looks like a recursive
> > process, as the number of nestings will vary with the
> > number of articles in the signature, and by magazine. The
> > idea of attaching an attribute <article id="n"> to each
> > article occurred to me, but this changes the workflow
> > somewhat, as ids were to be established in
> > post-processing, rather than by hand.

>
> Perhaps I'm missing something, but unnesting the structure
> described seems trivial enough to me:
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:template match="/">
> <unnested-articles>
> <xsl:apply-templates select="//article"/>
> </unnested-articles>
> </xsl:template>
> <xsl:template match="article">
> <xsl:copy>
> <xsl:apply-templates
> select="@*|node()" mode="clone"/>
> </xsl:copy>
> </xsl:template>
> <xsl:template match="@*|node()" mode="clone">
> <xsl:copy>
> <xsl:apply-templates
> select="@*|node()" mode="clone"/>
> </xsl:copy>
> </xsl:template>
> <xsl:template match="article" mode="clone"/>
> </xsl:stylesheet>
>
> --
> Pavel Lepin


Great! Thanks... This looks like it will work for now, and I'm going
to pursue a dialogue with the folks at Adobe to see why the XML is
being formatted like that in the first place, and if there is a way to
configure it differently.

Much appreciated.
MC




All times are GMT. The time now is 06:49 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.