xsl-list
[Top] [All Lists]

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

2006-06-20 10:58:45
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(_dot_)Rosler(_at_)flatironssolutions(_dot_)com>
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




--~------------------------------------------------------------------
XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to:
http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>