xsl-list
[Top] [All Lists]

[xsl] grouping question

2010-11-25 15:56:59
Dear XSLT List,

I'm trying to create build a hierarchy from structure that has been encoded 
with milestone tags. The source xml looks like:

<block ref="282r1">
  <hm281><pb folio="282r"/><rubric>blah blah bl<lb/>ah.</rubric></hm281>
  <hm280><pb folio="257r"/><rubric>blah blah blah</rubric></hm280>
  <hm282><pb folio="297v"/><rubric>blah blah blah</rubric> <lb/></hm282>
</block>
<block ref="282r2">
  <hm281><rubric>blah blah blah.</rubric> <lb/></hm281>
  <hm280><rubric>blah <lb/> blah blah.</rubric> <lb/></hm280>
  <hm282><rubric>blah blah blah</rubric> <lb/></hm282>
</block>
<!-lots more blocks -->

This is an interlinear collation of three manuscripts, from which I need to 
generate separate output for each manuscript that restores the original 
pagination and lineation. Page breaks are encoded with empty <pb/> milestones 
that record the page number on a @folio attribute. Line breaks are encoded with 
empty <lb/> milestones; the line number is calculated by counting the number of 
lines from the most recent page break. 

The strategy I've used--which almost works--is to group by <pb> and then 
process each of those groups by grouping by <lb>:

<xsl:for-each-group select="$root//*[name() eq $currentms]/node()"
  group-starting-with="pb">
  <tr>
    <th colspan="2">
      <xsl:value-of select="@folio"/>
    </th>
  </tr>
  <xsl:for-each-group select="current-group()"
    group-starting-with="lb">
    <tr>
      <th>
        <xsl:value-of select="position()"/>
      </th>
      <td class="os">
        <xsl:apply-templates select="current-group()"/>
      </td>
    </tr>
  </xsl:for-each-group>
</xsl:for-each-group>

The only place where this breaks is in the <hm280> line of the second <block> 
element in the snippet at the top of this message, where it fails to find the 
<lb> embedded in the <rubric>. I think I understand why; it is grouping the 
children of the group delimited by <pb> elements, so the <rubric> is a unit, 
and it doesn't flatten the hierarchy deeply enough to dig inside it. 

This is the only misfire and I can fix it in a few ways (including fiddling 
with the source xml), but is there a standard strategy for flattening all the 
way down, grouping by <lb> elements no matter how deeply they're embedded in 
the group delimited by the <pb> elements? I realize now that I've never had to 
more than one level deep for this type of project before.

Thanks,

David (djbpitt(_at_)pitt(_dot_)edu) 


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