[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] Patterns and scoped variables (or rather lack thereof)
Subject: Re: [xsl] Patterns and scoped variables (or rather lack thereof) From: Wendell Piez <wapiez@xxxxxxxxxxxxxxx> Date: Mon, 17 Feb 2014 12:15:39 -0500 |
Ihe, I will sometimes resort to stylesheet functions to provide encapsulation of logic like this. So (designed to return nothing when the input doesn't show two values when tokenized on the colon): <xsl:function name="ihe:colon-delimited-label" as="xs:string()?"> <xsl:param name="field" as="node()"/> <xsl:variable name="split-on-colon" select="tokenize($field,'\s*:\s*')"/> <xsl:if test="count($split-on-colon) eq 2"> <xsl:sequence select="$split-on-colon[1]"/> <xsl:if> </xsl:function> So <xsl:template match="text()[count(tokenize(ihe:colon-delimited-label(.)),'\s*') le 3]"> ... I hope that helps, Wendell On Sat, Feb 15, 2014 at 3:42 PM, Ihe Onwuka <ihe.onwuka@xxxxxxxxx> wrote: > Transforming this sort of markup > > <div class="fr small subtle">Transaction date: Sep 26, 2013</div> > > into a key value pair. > > <Transactiondate>Sep 26, 2013</Transactiondate> > > However if there are too many words before the colon separator (the > key part) then it probably isn't suitable for the key value treatment > (the code below uses 3 words as the cutoff point). > > Talking of the code below and the thread title, the issue is how many > times I've had to (or think I've had to ) tokenize the string on colon > because I cannot (or think I cannot) introduce a let scoped variable > into the pattern. > > > <xsl:template match="text()[count(tokenize(.,':')) eq 2 and > count(tokenize(tokenize(.,':')[1],'\s+')) lt 4]"> > > <xsl:variable name="keyValue" select="tokenize(.,':')"/> > > <xsl:element name="{replace($keyValue[1],'\s+','')}"> .....key..... > <xsl:value-of select="$keyValue[2]"/> > ......value..... > </xsl:element> > > </xsl:template> > > How else do I think I could do this. > > <xsl:template match="text()"> > <xsl:call-template name="dealWithText" > </xsl:template> > > <xsl:template name="dealWithText"> > <xsl:variable name="keyValue" select=tokenize ...etc> > <xsl:choose> > <xsl:when etc > > which of course camouflages the matchng rule inside the call template. > > Is this the best that can be done or have I missed something. > -- Wendell Piez | http://www.wendellpiez.com XML | XSLT | electronic publishing Eat Your Vegetables _____oo_________o_o___ooooo____ooooooo_^
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Patterns and scoped variables, Ihe Onwuka | Thread | Re: [xsl] Patterns and scoped varia, Ihe Onwuka |
RE: [xsl] XML Preprocessing and XSL, Adam Sobieski | Date | Re: [xsl] Patterns and scoped varia, Ihe Onwuka |
Month |