help using XSLT in parsing nested xml trees

Discussion in 'XML' started by binary_sunset, Mar 29, 2007.

  1. 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
     
    binary_sunset, Mar 29, 2007
    #1
    1. Advertisements

  2. binary_sunset

    p.lepin Guest

    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.
    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>
     
    p.lepin, Mar 30, 2007
    #2
    1. Advertisements

  3. binary_sunset

    Simon Brooke Guest

    in message <>,
    <xsl:template match="//article">
     
    Simon Brooke, Mar 30, 2007
    #3
  4. 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
     
    binary_sunset, Apr 2, 2007
    #4
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.