[xsl] Remove internal parsing and exclude one child

Subject: [xsl] Remove internal parsing and exclude one child
From: "Charles O'Connor coconnor@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 16 May 2017 17:29:19 -0000
Hi,

Using XSLT 1.0/Saxon9he

I have this input

<aff id="aff1"><label>1</label>Jet Propulsion Laboratory (JPL), 4800 Oak Grove
Dr Pasadena, CA <addr-line><postal-code>91109</postal-code>,
<country>USA</country></addr-line></aff>
<aff id="aff2"><label>2</label>SCRIPPS Institution of Oceanography, 9500
Gilman Drive, <institution>Dept 0230</institution>, <addr-line><city>La
Jolla</city>, <state>CA</state>
<postal-code>92093-0230</postal-code></addr-line>,
<country>USA</country></aff>

And would like to get the same back, without the internal parsing and
excluding the contents of <label>, e.g.,

<aff id="aff1">Jet Propulsion Laboratory (JPL), 4800 Oak Grove Dr Pasadena, CA
91109, USA</aff>
<aff id="aff2">SCRIPPS Institution of Oceanography, 9500 Gilman Drive, Dept
0230, La Jolla, CA 92093-0230, USA</aff>

Using this .xsl

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="//aff">
     <aff id="{@id}">
       <xsl:value-of select="."/>
    </aff>
 </xsl:template>

</xsl:stylesheet>

I get all the text in <aff>, including the text in <label>.

<aff id="aff1">1Jet Propulsion Laboratory (JPL), 4800 Oak Grove Dr Pasadena,
CA 91109, USA</aff>
<aff id="aff2">2SCRIPPS Institution of Oceanography, 9500 Gilman Drive, Dept
0230, La Jolla, CA 92093-0230, USA</aff>

I've tried various permutations of

<xsl:value-of select="./node()[not(self::label)]"/>

but I either lose the text from the descendants or repeat it. How do I get all
the text but drop the contents of <label>?

Thanks,
Charles

Current Thread