XSL if test starts-with

robert laing picture robert laing · Sep 20, 2012 · Viewed 58.2k times · Source

Given this piece of XML

<dc:date>info:eu-repo/date/embargoEnd/2013-06-12</dc:date>
<dc:date>2012-07-04</dc:date>

I should need with XSL to output only the year of the string not starting with info:eu-repo. I'm trying this way, but it doesn't work. I'm wrong with the for-each?

<xsl:if test="not(starts-with('dc:date', 'info:eu-repo'))">
                <xsl:for-each select="dc:date">
                    <publicationYear>
                        <xsl:variable name="date" select="."/>
                        <xsl:value-of select="substring($date, 0, 5)"/>
                    </publicationYear>
                </xsl:for-each>
</xsl:if>

Answer

DRCB picture DRCB · Sep 20, 2012

I guess you don't need ' in your start-with query, and you may want to iterate over dates slightly differently:

    <xsl:for-each select="dc:date">
         <xsl:variable name="date" select="."/>
         <xsl:if test="not(starts-with($date, 'info:eu-repo'))">
                <publicationYear>
                    <xsl:value-of select="substring($date, 0, 5)"/>
                </publicationYear>
        </xsl:if>
    </xsl:for-each>