|
Subject: [xsl] Seek an XPath expression that removes trailing spaces From: "Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 6 Jul 2024 12:47:56 -0000 |
Hi Folks,
I want to convert this:
<Airport_Name>LOWELL FLD </Airport_Name>
to this:
<name>LOWELL FLD</name>
The value of the <name> element must be identical to the value of the
<Airport_Name> element, except without the trailing spaces.
Multiple internal consecutive spaces, if present, must be preserved. Hence,
the normalize-space() function cannot be used.
I have a solution, but it requires a mix of XPath and a user-defined XSLT
function. I seek a pure XPath solution.
Here is the approach I took:
Convert the value of Airport_Name to a sequence of codepoints:
let $cp := string-to-codepoints(string(Airport_Name)) return
Reverse the sequence of codepoints:
let $rev := reverse($cp) return
Get the index of the first non-blank character:
let $idx := f:index-of-first-non-blank-char($rev,1) return
Extract the subsequence starting at the index:
let $subseq := $rev[position() ge $idx] return
Reverse the subsequence:
let $rev2 := reverse($subseq) return
Convert the codepoints to a string and return the string:
codepoints-to-string($rev2)
Obviously, f:index-of-first-non-blank-char() is not XPath; it's a user-defined
XSLT function that I created:
<xsl:function name="f:index-of-first-non-blank-char" as="xs:integer">
<xsl:param name="str" as="xs:integer+"/>
<xsl:param name="idx" as="xs:integer"/>
<xsl:choose>
<xsl:when test="$str[1] ne 32"> <!-- 32 = decimal value of space char
-->
<xsl:sequence select="$idx"/>
</xsl:when>
<xsl:otherwise>
<xsl:sequence
select="f:index-of-first-non-blank-char($str[position() gt 1], $idx + 1)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
There must be a better (simpler, shorter, more straightforward) way to solve
this problem.
Help, please!
/Roger
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] targeting the 'first' ins, Piez, Wendell A. (Fe | Thread | Re: [xsl] Seek an XPath expression , Martin Honnen martin |
| Re: [xsl] targeting the 'first' ins, Piez, Wendell A. (Fe | Date | Re: [xsl] Seek an XPath expression , Martin Honnen martin |
| Month |