I believe that select="$gelXmlData/ReceivedDate/text() is still returning a node of type text. The asString attribute is pulling the text out of the node and saving it in a string ReceivedDate.
<gel:set asString="true" select="$gelXmlData/ReceivedDate/text().substring(0,10)" var="ReceivedDate"/>
So this tosses a "You must define an attribute called 'select' for this tag," error?
Here is a small test with a parsed xml var.
<?xml version="1.0" encoding="utf-8"?>
<gel:script
xmlns:core="jelly:core"
xmlns:x="jelly:org.apache.commons.jelly.tags.xml.XMLTagLibrary"
xmlns:gel="jelly:com.niku.union.gel.GELTagLibrary"
xmlns:soap="jelly:com.niku.union.gel.SOAPTagLibrary"
xmlns:nikuq="http://www.niku.com/xog/Query"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<gel:parse var="xogReadProjects">
<Envelope>
<Body>
<ReadProject>
<NikuDataBus>
This is a test
</NikuDataBus>
</ReadProject>
</Body>
</Envelope>
</gel:parse>
<gel:set asString="true" select="$xogReadProjects/Envelope/Body/ReadProject/NikuDataBus/text()" var="ReceivedDate"/>
<gel:log>ReceivedDate = ${ReceivedDate}</gel:log>
<core:set var="ssReceivedDate" value="${ReceivedDate.substring(0,10)}" />
<gel:log>ssReceivedDate = ${ssReceivedDate}</gel:log>
<gel:log>Dump Context Variables</gel:log>
<core:set var="entries" value="${context.getVariables().entrySet().toArray()}" />
<core:forEach var="entry" items="${entries}">
<core:if test="${!entry.getKey().equalsIgnoreCase('systemScope')}" >
<gel:log> ${entry.getKey()} = ${entry.getValue()} | ${entry.getValue().getClass().getName()} </gel:log>
</core:if>
</core:forEach>
</gel:script>
V/r,
Gene