xsl-list
[Top] [All Lists]

[xsl] Sort by page number

2009-10-21 11:29:28
I've got a stylesheet that merges XML-files specified in the input
document. Its pretty short so I'll just post the whole thing here:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
        <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" 
indent="yes"/>
        <xsl:variable name="docs" select="/*/doc"/>
        
        <xsl:template match="mergeDocs">
                <xsl:apply-templates select="doc[1]"/>
        </xsl:template>
        
        <xsl:template match="doc">
                <xsl:variable name="path" select="@path"/>
                <xsl:for-each select="document($path)/*">
                        <xsl:sort select=".//@page[1]"/>
                        <xsl:copy>
                                <article>
                                <xsl:copy-of select="@* | *"/>
                                </article>
                                <xsl:for-each select="$docs[position() &gt; 1]">
                                        <article>
                                                <xsl:copy-of 
select="document(@path)/*/*"/>
                                        </article>
                                </xsl:for-each>
                        </xsl:copy>
                </xsl:for-each>
        </xsl:template>
        
</xsl:stylesheet>

The input file can look like this:

<mergeDocs>
  <doc path="doc1.xml"/>
  <doc path="doc2.xml"/>
  <doc path="doc3.xml"/>
</mergeDocs>

As you might figure out from the stylesheet, each of these XML-files
contains an article. There are no metadata available about the
ordering of these articles besides that they usually (not all do, so
"usually") contain a pagebreak tag like this one:

<pagebreak page="36"/>

Lets assume that these pagebreaks can occur at any place within the
article. In the stylesheet above I've tried to sort the articles like
this:

<xsl:sort select=".//@page[1]"/>

In my head this XPath expression reads "in the current article -> go
through all of the descendants -> select all of their attributes ->
pick out the page attributes -> pick the first one".

However, when run; nothing is sorted - as if the xsl:sort wasn't there
at all. I suspect that maybe it searches through the entire document
each time so that all articles are sorted as "page 1"? What am I doing
wrong here...

Regards
Jostein

--~------------------------------------------------------------------
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>