[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] outputting to original destination from within a result-document


Subject: Re: [xsl] outputting to original destination from within a result-document
From: Sara Mitchell <samitchell6@xxxxxxxxx>
Date: Tue, 20 Jun 2006 10:58:25 -0700 (PDT)

Well, I'm not sure what you're input looks like, but
I have a stylesheet that takes a DITA file (with
several topics or concepts that could be nested) and
1) creates a map and 2) spits out a separate file for
each topic level element. 

This is similar to your problem, but you will have to
substitute your own input. However, I'm using XSLT 1.0
-- so the syntax below is somewhat different. It
basically consists of these templates and a parameter
that specifies the name for the map file:

<xsl:param name="map-name"/> 

<xsl:template match="/">
  <!-- creates the map file -->
  <xsl:call-template name="structure-map"/>
  <!-- do chunking -->
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="topic">
<!-- could be concept, reference or task. Uses an 
  extension element to output to a separate file. 
  You would just use the XSLT element instead. -->
  <xlnr:write file="tempTopic.xml"
select="concat('xml/', @id, '.xml')">
<!-- copies the content -- you would do whatever 
  you need to do to create DITA content from your
  source --> 
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xlnr:write>
</xsl:template>

<!-- identity transformation template to copy all the
  DITA elements and attributes under 'topic' elements
-->

<!-- to create the map -->
<xsl:template name="structure-map">
  <xlnr:write file="tempMap.xml"
select="concat('xml/', $map-name, 'Map.xml')">
    <map>
      <xsl:for-each select="/dita/topic |
/dita/concept | /topic | /concept">
       <xsl:call-template name="topic-ref"/>
     </xsl:for-each>
    </map>
  </xlnr:write>
</xsl:template>

<xsl:template name="topic-ref">
  <topicref href="{concat(@id, '.xml')}">
    <xsl:for-each select="topic | concept">
      <xsl:call-template name="topic-ref"/>
    </xsl:for-each>
  </topicref>
</xsl:template>



--- Jeff Rosler <Jeff.Rosler@xxxxxxxxxxxxxxxxxxxxxx>
wrote:

> Hi All,
> 
> I am using <xsl:result-document> in my stylesheet
> (processing with Saxon
> 8.7). I'd like to output back to my original output
> document from within
> the <xsl:result-document>. Does anyone know of any
> way to do this? Right
> now, I'm assuming I'll just have to do post
> processing with a second
> stylesheet, but I thought I'd post to see if anyone
> has any good ideas.
> 
> My stylesheet is converting a single monolithic XML
> file to a DITA map
> file and also chunking out the content into separate
> DITA topic files
> (using <xsl:result-document>). This is a fine
> approach, but it doesn't
> handle nested sections in my monolithic XML file.
> When I get to a nested
> section (when I'm inside the <xsl:result-document>),
> I need to create
> another topic (new result document), but I also need
> to add a nested
> <topicref> to the DITA map file (original output
> document). I was trying
> to do this in a single XSL (creating the map file
> and doing the
> chunking), but now I think I need to fall back to
> two separate
> stylesheets; one to create the map and one to do the
> topic chunking.
> 
> Can anyone answer my first question or have any
> other suggestions?
> 
> Thanks for any and all responses,
> 
> Jeff Rosler
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


Current Thread
Keywords