[oXygen-user] an xslt challenge
Lou Burnard
lou.burnard at retired.ox.ac.uk
Mon Nov 5 06:03:13 CST 2018
I hope I am not abusing this list in asking occasionally for advice on
the best way to hack something in xslt.
Today's problem is to output only the first x sentences (string
terminated by a full stop) of a paragraph such that the total number of
words (space delimited strings) is less than some limit (call it
$maxWords) Since the sentences are of variable length, obviously I don't
know what x is.
Here's where I got to so far:
<xsl:template match="t:p">
<xsl:variable name="pString">
<xsl:value-of select="."/>
</xsl:variable>
<xsl:for-each select="tokenize($pString, '\.\s')">
<xsl:variable name="seq">
<xsl:value-of select="string(position())"/>
</xsl:variable>
<xsl:variable name="wordsSoFar">
<xsl:value-of
select="string-length(translate(normalize-space
(preceding-sibling::text()), ' ', '')) + 1"/>
</xsl:variable>
<xsl:if test="$wordsSoFar < $maxWords">
<s n="{$seq}">
<xsl:value-of select="."/>
</s>
<xsl:if>
</xsl:for-each>
</xsl:template>
But this is not valid because preceding-sibling:: wants a node() not a
string (even though "text()" *is* a node imho).
Am I going about this entirely the wrong way?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.oxygenxml.com/pipermail/oxygen-user/attachments/20181105/2312cef0/attachment.html>
More information about the oXygen-user
mailing list