<xsl:text> </xsl:text>\r
</xsl:variable>\r
\r
- <xsl:template name="string-replace-all">\r
+\r
+ <xsl:template name="escape-quotes">\r
<xsl:param name="text"/>\r
<xsl:param name="replace"/>\r
<xsl:param name="by"/>\r
<xsl:when test="contains($text,$replace)">\r
<xsl:value-of select="substring-before($text,$replace)"/>\r
<xsl:value-of select="$by"/>\r
- <xsl:call-template name="string-replace-all">\r
+ <xsl:call-template name="escape-quotes">\r
<xsl:with-param name="text" select="substring-after($text,$replace)"/>\r
<xsl:with-param name="replace" select="$replace"/>\r
<xsl:with-param name="by" select="$by"/>\r
</xsl:choose>\r
</xsl:template>\r
\r
+<xsl:template name="wrap-when-comma">\r
+ <xsl:param name="unwrappedtext"/>\r
+ <xsl:param name="delimiter"/>\r
+ <xsl:choose>\r
+ <xsl:when test="contains($unwrappedtext,$delimiter)"> \r
+ <xsl:text>"</xsl:text>\r
+ <xsl:call-template name="escape-quotes">\r
+ <xsl:with-param name="text" select="$unwrappedtext"/>\r
+ <xsl:with-param name="replace" select="'"'"/>\r
+ <xsl:with-param name="by" select="'""'"/>\r
+ </xsl:call-template> \r
+ <xsl:text>"</xsl:text>\r
+ </xsl:when>\r
+ <xsl:otherwise>\r
+ <xsl:value-of select="$unwrappedtext"/> \r
+ </xsl:otherwise>\r
+ </xsl:choose>\r
+</xsl:template>\r
+\r
<xsl:template match="/"> \r
<xsl:apply-templates select="//tax:TaxonOccurrence"/> \r
</xsl:template>\r
\r
<xsl:template match="tax:TaxonOccurrence"> \r
\r
-<xsl:text>"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:TaxonName/tax2:authorship/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:TaxonName/tax2:authorship/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:genusPart/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:genusPart/text()"/> \r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infragenericEpithet/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infragenericEpithet/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:specificEpithet/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:specificEpithet/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infraspecificEpithet/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:infraspecificEpithet/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:nameComplete/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="./tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:nameComplete/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:uninomial/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/tax1:hasName/tax2:TaxonName/tax2:uninomial/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxonName/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:identifiedTo/tax:Identification/tax:taxonName/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:identifiedTo/tax:Identification/tax:taxon/tax1:TaxonConcept/@gbifKey/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text> \r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="@gbifKey"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
<xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:decimalLatitude/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:decimalLatitude/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
<xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:decimalLongitude/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:decimalLongitude/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
-<xsl:text>,"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:earliestDateCollected/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:earliestDateCollected/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:latestDateCollected/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:latestDateCollected/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>",</xsl:text>\r
-<xsl:value-of select="tax:coordinateUncertaintyInMeters/text()"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:coordinateUncertaintyInMeters/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
-<xsl:text>,"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:country/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:country/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:collector/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:collector/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:fieldNotes/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:fieldNotes/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:locality/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:locality/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>",</xsl:text>\r
-<xsl:value-of select="tax:maximumDepthInMeters/text()"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:maximumDepthInMeters/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
<xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:maximumElevationInMeters/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:maximumElevationInMeters/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
<xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:minimumDepthInMeters/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:minimumDepthInMeters/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
<xsl:text>,</xsl:text>\r
-<xsl:value-of select="tax:minimumElevationInMeters/text()"/>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:minimumElevationInMeters/text()"/>\r
+ <xsl:with-param name="delimiter" select="','"/>\r
+</xsl:call-template>\r
\r
-<xsl:text>,"</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="tax:value/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="tax:value/text()"/> \r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="../../../../gbif:name/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="../../../../gbif:name/text()"/> \r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="../../gbif:name/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="../../gbif:name/text()"/> \r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="../../gbif:rights/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="../../gbif:rights/text()"/> \r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
-<xsl:text>","</xsl:text>\r
-<xsl:call-template name="string-replace-all">\r
- <xsl:with-param name="text" select="../../gbif:citation/text()"/>\r
- <xsl:with-param name="replace" select="'"'"/>\r
- <xsl:with-param name="by" select="'""'"/>\r
+<xsl:text>,</xsl:text>\r
+<xsl:call-template name="wrap-when-comma">\r
+ <xsl:with-param name="unwrappedtext" select="../../gbif:citation/text()"/> \r
+ <xsl:with-param name="delimiter" select="','"/>\r
</xsl:call-template>\r
\r
<xsl:value-of select="$newline"/> \r