We can use this XSLT step to find the low and high tides and set them as attributes:
<p:xslt> <xsl:transform version="1.0"> <xsl:template match="t:tideinfo"> <xsl:variable name="today" select="string(@today)"/> <xsl:copy> <xsl:attribute name="low-at"> <xsl:for-each select="t:tide-data/t:tide-level" mode="first"> <xsl:sort data-type="number" order="ascending" select="@level"/> <xsl:if test="position()=1"> <xsl:value-of select="@time"/> </xsl:if> </xsl:for-each> </xsl:attribute> <xsl:attribute name="high-at"> <xsl:for-each select="t:tide-data/t:tide-level" mode="first"> <xsl:sort data-type="number" order="descending" select="@level"/> <xsl:if test="position()=1"> <xsl:value-of select="@time"/> </xsl:if> </xsl:for-each> </xsl:attribute> <xsl:copy-of select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="t:tide-level[1]" mode="first"> <xsl:value-of select="@time"/> </xsl:template> <xsl:template match="t:tide-level" mode="first"/> </xsl:transform> </p:xslt>