diff options
-rw-r--r-- | parse-xml.c | 1 | ||||
-rw-r--r-- | xslt/udcf.xslt | 96 |
2 files changed, 97 insertions, 0 deletions
diff --git a/parse-xml.c b/parse-xml.c index 42fd73908..b1bb2efb9 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -1603,6 +1603,7 @@ static struct xslt_files { { "dives", "MacDive.xslt" }, { "DIVELOGSDATA", "divelogs.xslt" }, { "uddf", "uddf.xslt" }, + { "profile", "udcf.xslt" }, { "Divinglog", "DivingLog.xslt" }, { NULL, } }; diff --git a/xslt/udcf.xslt b/xslt/udcf.xslt new file mode 100644 index 000000000..982516fee --- /dev/null +++ b/xslt/udcf.xslt @@ -0,0 +1,96 @@ +<?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:strip-space elements="*"/> + <xsl:output method="xml" indent="yes"/> + + <xsl:template match="/"> + <divelog program="subsurface" version="2"> + <dives> + <xsl:apply-templates select="/PROFILE/REPGROUP/DIVE|/profile/repgroup/dive"/> + </dives> + </divelog> + </xsl:template> + + <xsl:template match="DIVE|dive"> + <dive> + <xsl:attribute name="date"> + <xsl:for-each select="DATE/YEAR|DATE/MONTH|DATE/DAY|date/year|date/month|date/day"> + <xsl:if test="position() != 1">-</xsl:if> + <xsl:value-of select="."/> + </xsl:for-each> + </xsl:attribute> + + <xsl:attribute name="time"> + <xsl:for-each select="TIME/HOUR|TIME/MINUTE|time/hour|time/minute"> + <xsl:if test="position() != 1">:</xsl:if> + <xsl:value-of select="."/> + </xsl:for-each> + </xsl:attribute> + + <location> + <xsl:value-of select="PLACE|place"/> + </location> + + <xsl:if test="TEMPERATURE|temperature != ''"> + <temperature> + <xsl:attribute name="water"> + <xsl:value-of select="concat(TEMPERATURE|temperature, ' C')"/> + </xsl:attribute> + </temperature> + </xsl:if> + + <xsl:for-each select="GASES/MIX|gases/mix"> + <cylinder> + <xsl:attribute name="description"> + <xsl:value-of select="MIXNAME|mixname"/> + </xsl:attribute> + <xsl:attribute name="size"> + <xsl:value-of select="concat(TANK/TANKVOLUME|tank/tankvolume, ' l')"/> + </xsl:attribute> + <xsl:attribute name="start"> + <xsl:value-of select="TANK/PSTART|tank/pstart"/> + </xsl:attribute> + <xsl:attribute name="end"> + <xsl:value-of select="TANK/PEND|tank/pend"/> + </xsl:attribute> + <xsl:attribute name="o2"> + <xsl:value-of select="O2|o2"/> + </xsl:attribute> + <xsl:attribute name="he"> + <xsl:value-of select="HE|he"/> + </xsl:attribute> + </cylinder> + </xsl:for-each> + + <xsl:variable name="delta" select="SAMPLES/DELTA|samples/delta"/> + + <!-- gas change --> + <xsl:for-each select="SAMPLES/SWITCH|samples/switch"> + <event name="gaschange"> + <xsl:variable name="timeSec" select="count(preceding-sibling::D|preceding-sibling::d) * $delta"/> + <xsl:attribute name="time"> + <xsl:value-of select="concat(floor($timeSec div 60), ':', + format-number(floor($timeSec mod 60), '00'), ' min')"/> + </xsl:attribute> + <xsl:attribute name="value"> + <xsl:value-of select="ancestor::DIVE/GASES/MIX[MIXNAME=current()]/O2|ancestor::dive/gases/mix[mixname=current()]/o2 * 100" /> + </xsl:attribute> + </event> + </xsl:for-each> + <!-- end gas change --> + + <xsl:for-each select="SAMPLES/D|samples/d"> + <sample> + <xsl:variable name="timeSec" select="(position() - 1) * $delta"/> + <xsl:attribute name="time"> + <xsl:value-of select="concat(floor($timeSec div 60), ':', + format-number(floor($timeSec mod 60), '00'), ' min')"/> + </xsl:attribute> + <xsl:attribute name="depth"> + <xsl:value-of select="concat(., ' m')"/> + </xsl:attribute> + </sample> + </xsl:for-each> + </dive> + </xsl:template> +</xsl:stylesheet> |