Skip to content

Instantly share code, notes, and snippets.

@timathom
Last active August 29, 2015 14:02
Show Gist options
  • Save timathom/502572995e5ce03d4cbf to your computer and use it in GitHub Desktop.
Save timathom/502572995e5ce03d4cbf to your computer and use it in GitHub Desktop.
Use case for fn:for-each-pair
(: See http://stackoverflow.com/questions/17975306/aligning-fields-based-on-position-using-xslt :)
(: XML input :)
(:
<?xml version="1.0" encoding="UTF-8"?>
<collections>
<collection name="anyCollection">
<record>
<field name="materia">comida; bebida; fiesta</field>
<field name="subject">food; drink; party</field>
<field name="recordid">abc0001</field>
</record>
<record>
<field name="materia">comida; bebida; fiesta</field>
<field name="subject">food; drink; party</field>
<field name="recordid">abc0002</field>
</record>
<record>
<field name="materia">bebida; fiesta</field>
<field name="subject">food; drink; party</field>
<field name="recordid">abc0003</field>
</record>
<record>
<field name="materia">fiesta; sombreros; música; baile; agua; cerveza; sopa</field>
<field name="subject">party; hats; music; dance; water; beer; soup</field>
<field name="recordid">abc0004</field>
</record>
<record>
<field name="materia">comida; bebida; fiesta; sombreros; música</field>
<field name="subject">food; drink; party; hats; music</field>
<field name="recordid">abc0005</field>
</record>
<record>
<field name="materia">comida; bebida; cerveza; agua</field>
<field name="subject">food; drink; beer; water</field>
<field name="recordid">abc0006</field>
</record>
<record>
<field name="materia">fiesta; sombreros; música; baile; agua; cerveza</field>
<field name="subject">party; hats; music; dance; water; beer</field>
<field name="recordid">abc0007</field>
</record>
</collection>
</collections>
:)
(: XQuery :)
for $record in //record
for $spa in $record/field[@name='materia']
for $eng in $record/field[@name='subject']
for $id in $record/field[@name='recordid']/text()
for $pair in for-each-pair(
tokenize($spa, '; '),
tokenize($eng, '; '),
function($x, $y) { $x || '_' || $y || '&#xa;' })
group by $pair
order by $pair
return (
for $p in $pair
return
concat('&#xa;',$p),
for $i in $id
return
concat($i,'&#xa;')
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment