Re: [xsl] Is the first preceding-sibling a processing-instruction?

Subject: Re: [xsl] Is the first preceding-sibling a processing-instruction?
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 8 May 2023 13:37:38 -0000
I guess you want the first preceding sibling node that isn't a whitespace text
node, provided it is a processing instruction.

It would be easier if you did xsl:strip-space...

But you could do

preceding-sibling::node()[not(self::text())][1][self::processing-instruction(
)]

Michael Kay
Saxonica

> On 8 May 2023, at 14:32, rick@xxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi All,
>
> I have this XML:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <manual>
>    <?Fm Document GN800042-VGRShreddingMill_UM_cover.fm
<http://gn800042-vgrshreddingmill_um_cover.fm/>?>
>    <cover/>
>    <?Fm Document BP00001.fm <http://bp00001.fm/>?>
>    <chapter/>
>    <?Fm Document BP00010.fm <http://bp00010.fm/>?>
>    <chapter/>
>    <?Fm Document GN800042.fm <http://gn800042.fm/>?>
>    <chapter/>
>    <?Fm Document SC00019.fm <http://sc00019.fm/>?>
>    <chapter/>
>    <chapter/>
> </manual>
>
> For each chapter element, I want to grab the immediately preceding
processing-instruction. The third message in my code doesnbt return it. The
second one does, but it doesnbt insure that the processing-instruction is
the first preceding-sibling. Thanks in advance for your help.
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform
<http://www.w3.org/1999/XSL/Transform>"
>     xmlns:xs="http://www.w3.org/2001/XMLSchema
<http://www.w3.org/2001/XMLSchema>"
>     xmlns:math="http://www.w3.org/2005/xpath-functions/math
<http://www.w3.org/2005/xpath-functions/math>"
>     exclude-result-prefixes="xs math"
>     version="3.0" expand-text="yes">
>
>     <xsl:output indent="yes"/>
>
>     <xsl:template match="/">
>         <xsl:apply-templates/>
>     </xsl:template>
>
>     <xsl:template match="/*/*">
>         <xsl:message>{local-name(.)}</xsl:message>
>
<xsl:message>{preceding-sibling::processing-instruction()[1]}</xsl:message>
>
<xsl:message>{preceding-sibling::*[1][self::processing-instruction()]}</xsl:m
essage>
>     </xsl:template>
>
>     <xsl:mode on-no-match="shallow-skip"/>
>
> </xsl:stylesheet>
>
> Rick
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by
email <>)

Current Thread