Skip to content
This repository has been archived by the owner on Nov 7, 2018. It is now read-only.

Commit

Permalink
have the xsl for generating csv docs
Browse files Browse the repository at this point in the history
  • Loading branch information
benfoxall committed Oct 31, 2012
1 parent cb47edd commit 1468dfc
Show file tree
Hide file tree
Showing 8 changed files with 1,188 additions and 0 deletions.
6 changes: 6 additions & 0 deletions xsl/README
@@ -0,0 +1,6 @@
These files are for turning IATI XML into CSV to open in spreadsheet software.


## Simple-activity-listing

This file was created to populate a simplified view of IATI Data on Buzz Data. It will be revised based on feedback from the user community.
84 changes: 84 additions & 0 deletions xsl/csv-iati-helpers.xsl
@@ -0,0 +1,84 @@
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template name="add_transaction_value">
<xsl:param name="transaction-type" select="''"/>
<xsl:call-template name="add">
<xsl:with-param name="value" select="transaction-type[@code=$transaction-type]/../value"/>
<xsl:with-param name="quote"></xsl:with-param>
</xsl:call-template>
</xsl:template>

<xsl:template name="sum_transaction_values">
<xsl:param name="transaction-type" select="''"/>
<xsl:call-template name="add">
<xsl:with-param name="value" select="sum(transaction/transaction-type[@code=$transaction-type]/../value)"/>
<xsl:with-param name="quote"></xsl:with-param>
</xsl:call-template>
</xsl:template>

<xsl:template name="add_participating_org">
<xsl:param name="role" select="''"/>
<xsl:call-template name="join"> <xsl:with-param name="values" select="participating-org[@role=$role]/@ref"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="participating-org[@role=$role]/@type"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="participating-org[@role=$role]/@xml:lang"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="participating-org[@role=$role]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="join_transaction_field_with_code_and_lang">
<xsl:param name="field" select="''"/>
<xsl:call-template name="join"> <xsl:with-param name="values" select="transaction/*[local-name() = $field]/@code"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="transaction/*[local-name() = $field]/@xml:lang"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="transaction/*[local-name() = $field]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="join_with_code">
<xsl:param name="field" select="''"/>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $field]/@code"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $field]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="join_with_code_and_lang">
<xsl:param name="field" select="''"/>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $field]/@code"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $field]/@xml:lang"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $field]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="add_with_code">
<xsl:param name="field" select="''"/>
<xsl:call-template name="add"> <xsl:with-param name="value" select="*[local-name() = $field]/@code"/> </xsl:call-template>
<xsl:call-template name="add"> <xsl:with-param name="value" select="*[local-name() = $field]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="add_with_code_and_lang">
<xsl:param name="field" select="''"/>
<xsl:call-template name="add"> <xsl:with-param name="value" select="*[local-name() = $field]/@code"/> </xsl:call-template>
<xsl:call-template name="add"> <xsl:with-param name="value" select="*[local-name() = $field]/@xml:lang"/> </xsl:call-template>
<xsl:call-template name="add"> <xsl:with-param name="value" select="*[local-name() = $field]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="add_activity_date">
<xsl:param name="type" select="''"/>
<xsl:call-template name="add"> <xsl:with-param name="value" select="activity-date[@type=$type]/@iso-date"/> </xsl:call-template>
<xsl:call-template name="add"> <xsl:with-param name="value" select="activity-date[@type=$type]/@xml:lang"/> </xsl:call-template>
<xsl:call-template name="add"> <xsl:with-param name="value" select="activity-date[@type=$type]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="add_activity_date_simple">
<xsl:param name="type" select="''"/>
<xsl:call-template name="add"> <xsl:with-param name="value" select="activity-date[@type=$type]/@iso-date"/> </xsl:call-template>
<xsl:call-template name="add"> <xsl:with-param name="value" select="activity-date[@type=$type]"/> </xsl:call-template>
</xsl:template>

<xsl:template name="add_start_end_value">
<xsl:param name="element_name" select="''"/>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/period-start"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/period-start/@iso-date"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/period-end"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/period-end/@iso-date"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/value"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/value/@value-date"/> </xsl:call-template>
<xsl:call-template name="join"> <xsl:with-param name="values" select="*[local-name() = $element_name]/value/@currency"/> </xsl:call-template>
</xsl:template>

</xsl:stylesheet>
41 changes: 41 additions & 0 deletions xsl/csv-utilities.xsl
@@ -0,0 +1,41 @@
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" encoding="utf8"/>
<xsl:strip-space elements="*"/>

<xsl:template name="add">
<xsl:param name="value" select="''"/>
<xsl:param name="quote"><xsl:text>"</xsl:text></xsl:param>
<xsl:param name="separator"><xsl:text>,</xsl:text></xsl:param>
<xsl:param name="remove"></xsl:param>
<xsl:variable name="doublequote">"</xsl:variable>
<xsl:value-of select="$quote"/>
<xsl:value-of select="translate(translate($value,$doublequote,''),$remove,'')"/>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$separator"/>
</xsl:template>

<xsl:template name="join" >
<xsl:param name="values" select="''"/>
<xsl:param name="quote"><xsl:text>"</xsl:text></xsl:param>
<xsl:param name="separator"><xsl:text>,</xsl:text></xsl:param>
<xsl:param name="concatenation_separator"><xsl:text>; </xsl:text></xsl:param>
<xsl:param name="remove"></xsl:param>
<xsl:variable name="doublequote">"</xsl:variable>

<xsl:value-of select="$quote"/>
<xsl:for-each select="$values">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:value-of select="translate(translate(.,$doublequote,''),$remove,'')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="translate(translate(concat($concatenation_separator,.),$doublequote,''),$remove,'')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:value-of select="$quote"/>
<xsl:value-of select="$separator"/>
</xsl:template>

</xsl:stylesheet>

0 comments on commit 1468dfc

Please sign in to comment.