|
Subject: Re: [xsl] Test character immediately preceding node From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Tue, 8 Oct 2013 15:26:17 -0700 |
> preceding-sibling::node()[self::text()][1]
Actually this should read:
preceding-sibling::node()[1][self::text()]
On Tue, Oct 8, 2013 at 2:50 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> The node, whose last character we are testing for being a whitespace,
> needs to be selected like this:
>
> preceding-sibling::node()[self::text()][1]
>
> And in case there is no such node, a new text node needs to be added,
> containing only a single space -- this can be easily done overriding
> the identity rule.
>
> Cheers,
> Dimitre
>
> On Tue, Oct 8, 2013 at 2:12 PM, David Sewell <dsewell@xxxxxxxxxxxx> wrote:
>> One strategy in XSLT 2.0 would be to test for the existence of a space at
>> the end of the preceding node and add a space if it's not there:
>>
>> <xsl:template match="unittitle">
>> <xsl:copy><xsl:apply-templates/></xsl:copy>
>> </xsl:template>
>>
>> <xsl:template match="unitdate">
>> <xsl:choose>
>> <xsl:when test="preceding-sibling::node()[1][matches(., '\s$')]">
>> <xsl:value-of select="."/>
>> </xsl:when>
>> <xsl:otherwise>
>> <xsl:value-of select="concat(' ', .)"/>
>> </xsl:otherwise>
>> </xsl:choose>
>> </xsl:template>
>>
>> which will give you
>>
>> <unittitle>Statements 2001</unittitle>
>> <unittitle>Statements 2001</unittitle>
>>
>> but the following should accomplish the same thing with more concision and
>> is more robust as it will handle multiple spaces before <unitdate> if they
>> occur:
>>
>> <xsl:template match="unittitle">
>> <xsl:copy>
>> <xsl:value-of select="string-join((normalize-space(text()),
>> unitdate), ' ')"/>
>> </xsl:copy>
>> </xsl:template>
>>
>> DS
>>
>>
>> On Tue, 8 Oct 2013, Nathan Tallman wrote:
>>
>>> Is it possible to test a character immediately preceding a node? I
>>> have an element with child-elements, my trouble is that sometimes
>>> there is a space before the child-element, sometimes not. For example
>>> I might have:
>>>
>>> <unittitle>Statements <unitdate>2001</unitdate></unittitle>
>>> or
>>> <unittitle>Statements<unitdate>2001</unitdate></unittitle>
>>>
>>> The XSLT that I'm forking from has instructions to insert a space
>>> before <unitdate>, which sometimes results in two spaces in the
>>> output. I'd like to use an xsl:choose to test for a space immediately
>>> preceding <unitdate>. Is this possible? I'm using XSLT 2.0.
>>>
>>> Thanks,
>>> Nathan
>>>
>>>
>>
>> --
>> David Sewell, Editorial and Technical Manager
>> ROTUNDA, The University of Virginia Press
>> PO Box 400314, Charlottesville, VA 22904-4314 USA
>> Email: dsewell@xxxxxxxxxxxx Tel: +1 434 924 9973
>> Web: http://rotunda.upress.virginia.edu/
>>
>
>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> To avoid situations in which you might make mistakes may be the
> biggest mistake of all
> ------------------------------------
> Quality means doing it right when no one is looking.
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
> -------------------------------------
> Facts do not cease to exist because they are ignored.
> -------------------------------------
> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
> write all patents, too? :)
> -------------------------------------
> I finally figured out the only reason to be alive is to enjoy it.
--
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Test character immediatel, Dimitre Novatchev | Thread | [xsl] Re: Test character immediatel, Nathan Tallman |
| Re: [xsl] Test character immediatel, Dimitre Novatchev | Date | [xsl] Re: Test character immediatel, Nathan Tallman |
| Month |