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

Subject: [xsl] Is the first preceding-sibling a processing-instruction?
From: "rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 8 May 2023 13:32:12 -0000
Hi All,

 

I have this XML:

 

<?xml version="1.0" encoding="UTF-8"?>

<manual>

   <?Fm Document GN800042-VGRShreddingMill_UM_cover.fm?>

   <cover/>

   <?Fm Document BP00001.fm?>

   <chapter/>

   <?Fm Document BP00010.fm?>

   <chapter/>

   <?Fm Document GN800042.fm?>

   <chapter/>

   <?Fm Document SC00019.fm?>

   <chapter/>

   <chapter/>

</manual>

 

For each chapter element, I want to grab the immediately preceding
processing-instruction. The third message in my code doesn't return it. The
second one does, but it doesn't 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";

    xmlns:xs="http://www.w3.org/2001/XMLSchema";

    xmlns: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:
message>

    </xsl:template>    

    

    <xsl:mode on-no-match="shallow-skip"/>

    

</xsl:stylesheet>

 

Rick

Current Thread