SPFE Documentation | Collections > SPFE Function Reference > process-placeholders
Function: process-placeholders
process-placeholders(string as item()*, literal-name as item()*, placeholder-name as item()*) as node()*
- Description
-
Processes a string to determine if it contains placeholder markup in the form of a string contained between "{" and "}". Recognizes "{{}" as an escape sequence for a literal "{". Nesting of placeholders is not supported. The use of a literal "{" or "}" inside the placeholder string is not supported. The function does not attempt to detect or report these conditions, however. $string is the string to process. $literal-name is the element name to wrap around a the literal parts of $string. $placeholder-name is the element name to wrap around the placeholder parts of $string.
- Return value
-
Return type: node()*
Returns an XML sequence in which the literal portions of the input string are wrapped in an element whose name is passed as the literal-name parameter and the placeholder portions of the string are wrapped in an element whose name is passed as the placeholder-nameparameter.
For example, given the following call:
sf:process-placeholders('foo{bar}bas','lit','var')The return value would be an XML sequence like this:
<lit>foo</lit><var>bar</var><lit>bas</lit>
- Source file
-
$SPFEOT_HOME/1.0/scripts/common/utility-functions.xsl
Parameters
- string
-
Type: item()*
The string to be processed.
- literal-name
-
Type: item()*
The name of the XML element to use to wrap the literal portions of the string.
- placeholder-name
-
Type: item()*
The name of the XML element to use to wrap the placeholder portions of the string.
Definition
<xsl:function name="sf:process-placeholders" as="node()*">
<xsl:param name="string"/>
<xsl:param name="literal-name"/>
<xsl:param name="placeholder-name"/>
<xsl:analyze-string select="$string" regex="\{{([^}}]*)\}}">
<xsl:matching-substring >
<xsl:choose >
<xsl:when test="regex-group(1)=''"/>
<xsl:when test="regex-group(1)='{'">
<xsl:choose >
<xsl:when test="$literal-name ne ''">
<xsl:element name="pe:{$literal-name}">
<xsl:value-of select="regex-group(1)"/>
</xsl:element>
</xsl:when>
<xsl:otherwise >
<xsl:value-of select="regex-group(1)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise >
<xsl:element name="pe:{$placeholder-name}">
<xsl:value-of select="regex-group(1)"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:matching-substring>
<xsl:non-matching-substring >
<xsl:if test="not(normalize-space(.)='')">
<xsl:choose >
<xsl:when test="$literal-name ne''">
<xsl:element name="pe:{$literal-name}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:when>
<xsl:otherwise >
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:function>