Re: [xsl] targeting the 'first' instance of the same element in variable structures

Subject: Re: [xsl] targeting the 'first' instance of the same element in variable structures
From: "Jean-Paul Rehr rehrjb@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 2 Jul 2024 11:14:09 -0000
>How about <xsl:template match="(div/descendant::head)[1]"> ?

same result as Martin's solution, alas.

On Tue, Jul 2, 2024 at 1:08b/PM David Birnbaum djbpitt@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> How about <xsl:template match="(div/descendant::head)[1]"> ?
>
> On Jul 2, 2024, at 7:04b/AM, Jean-Paul Rehr rehrjb@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> o;?
> At first Martin's solution  <xsl:template match="(div//head)[1]"> looked
> like it would work. But then I started to test the various documents I have
> to work with, in particular at the most problematic. Below is an actual
> fragment, but I've put it in this Fiddle
>
<https://martin-honnen.github.io/cheerpj3-saxonhe12-fiddle/?code=%3C%3Fxml+ve
rsion%3D%221.0%22+encoding%3D%22utf-8%22%3F%3E%0A%3Cxsl%3Astylesheet+xmlns%3A
xsl%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2FXSL%2FTransform%22%0A++version%3D%2
23.0%22%0A++xmlns%3Axs%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%0A+
+exclude-result-prefixes%3D%22%23all%22%0A++expand-text%3D%22yes%22%3E%0A++%0
A++%3Cxsl%3Atemplate+match%3D%22%28div%2F%2Fhead%29%5B1%5D%22%3E%0A++++%3Cxsl
%3Acomment%3EMatched+%7Bnode-name%28%29%7D%3C%2Fxsl%3Acomment%3E%0A++++%3Cxsl
%3Anext-match%2F%3E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A++%3Cxsl%3Aoutput+method
%3D%22xml%22+indent%3D%22no%22%2F%3E%0A%0A++%3Cxsl%3Amode+on-no-match%3D%22sh
allow-copy%22%2F%3E%0A%0A++%3Cxsl%3Atemplate+match%3D%22%2F%22+name%3D%22xsl%
3Ainitial-template%22%3E%0A++++%3Cxsl%3Acopy%3E%0A++++++%3Cxsl%3Aapply-templa
tes%2F%3E%0A++++++%3Cxsl%3Acomment%3ERun+with+%7Bsystem-property%28%27xsl%3Ap
roduct-name%27%29%7D+%7Bsystem-property%28%27xsl%3Aproduct-version%27%29%7D+a
t+%7Bcurrent-dateTime%28%29%7D%3C%2Fxsl%3Acomment%3E%0A++++%3C%2Fxsl%3Acopy%3
E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A%3C%2Fxsl%3Astylesheet%3E%0A&input=%3Croot
%3E%0A++%3Cdiv+xml%3Aid%3D%22michael-meld-dist-div-5Ehm2la0%22%3E%0A%09%09%3C
div+xml%3Aid%3D%22michael-meld-dist-div-1k784804%22+type%3D%22fulltext%22%3E%
0A%09%09%09%3Cdiv+xml%3Aid%3D%22michael-meld-dist-div-23IEC0ec%22+type%3D%22p
rologus%22%3E%0A%09%09%09%09%09%3Chead%3EPREFATIO%3Cnote+type%3D%22source%22%
3EIndicem+analyticum%2C+qui+ex+vetusta+exemplari+Ms.+in+ceteris+editionibus+h
oc+loco+legitur%2C+ad+calcem+voluminis+tomi+rejecimus.%3C%2Fnote%3E%0A%09%09%
09%09%09%3C%2Fhead%3E%0A%09%09%09%09%09%3Cp+xml%3Aid%3D%22michael-meld-dist-p
-k78i0214%22%3EQuisquis+ad+divine+pagine+lectionem+erudiendus+accedit%2C+in+p
rincipio+considerare+debet%2C+que+sit+illius+Scripture+materia%2C+circa+quam+
versatur+ejus+tractatus.+Est+autem+illius%0A%09%09%09%09%09%09principalis+mat
eria%2C+opus+restaurationis.%3C%2Fp%3E%0A%09%09%09%09%09%3Cdiv+xml%3Aid%3D%22
michael-meld-dist-div-02847i24%22+sameAs%3D%22michaelis_0001%22+type%3D%22dis
tinctio%22%3E%0A%09%09%09%09%09%09%3Chead%3EOpus+conditionis+et+restaurationi
s%3C%2Fhead%3E%0A%09%09%09%09%09%09%3Cp+xml%3Aid%3D%22michael-meld-dist-p-0M0
t4368%22%3ESunt+enim+duo+opera+%3A+opus+conditionis%2C+et+opus+restaurationis
.+Opus+conditionis+est%2C+quo+factum+est+ut+essent%2C+que+non+erant%3B+opus+r
estaurationis+est%2C+per+quod+meliorata+sunt%2C+que%0A%09%09%09%09%09%09%09pe
rierant.+Opere+conditionis+factus+est+mundus+cum+suis+elementis%3B+opere+rest
aurationis%2C+Verbi+incarnatio+cum+suis+sacramentis.+%3C%2Fp%3E%0A%09%09%09%0
9++%3C%2Fdiv%3E%0A%09%09%09++%09%3Cdiv+xml%3Aid%3D%22michael-meld-dist-div-qA
5X66Ks%22+sameAs%3D%22michaelis_0002%22+type%3D%22distinctio%22%3E%0A%09%09%0
9%09%09++%3Chead%3ESacre+Scripture+prestantia%3C%2Fhead%3E%0A%09%09%09%09%09+
+%3Cp+xml%3Aid%3D%22michael-meld-dist-p-E1v5wA1j%22%3EEx+quo+manifestum+est%2
C+quod+Scriptura+cunctis+aliis+precellit%2C+tum+materie+dignitate%2C+tum+prof
unditate%2C+et+subtilitate.+Et+si+quis+diligenter+attendit%2C+potest+perciper
e+quod+omnes%0A%09%09%09%09%09%09+artes%2C+tam+liberales%2C+quam+naturales%2C
+ei+tanquam+domine+famulantur.+%3C%2Fp%3E%0A%09%09%09%09++%3C%2Fdiv%3E%0A%09%
09%09%3C%2Fdiv%3E%0A%09%09%3C%2Fdiv%3E%0A%09%3C%2Fdiv%3E%0A%3C%2Froot%3E%0A&c
ode-type=XSLT&input-type=XML>.
> As we can see it matched two items...it should only match the first. In
> bold below are what the template matched, in red bold what should be
> exclusively matched.
>
>   <div xml:id="michael-meld-dist-div-5Ehm2la0">
>     <div xml:id="michael-meld-dist-div-1k784804" type="fulltext">
>       <div xml:id="michael-meld-dist-div-23IEC0ec" type="prologus">
>
> *<head>PREFATIO<note type="source">Indicem analyticum, qui ex vetusta
> exemplari Ms. in ceteris editionibus hoc loco legitur, ad
>    calcem  voluminis tomi rejecimus.</note>          </head>*
>           <p xml:id="michael-meld-dist-p-k78i0214">Quisquis ad divine
> pagine lectionem erudiendus accedit, in principio considerare debet, que
> sit illius                Scripture materia, circa quam versatur ejus
> tractatus. Est autem illius
>                principalis materia, opus restaurationis.</p>
>           <div xml:id="michael-meld-dist-div-02847i24"
> sameAs="michaelis_0001" type="distinctio">
>         *     <head>Opus conditionis et restaurationis</head>*
>              <p xml:id="michael-meld-dist-p-0M0t4368">Sunt enim duo opera
> : opus conditionis, et opus restaurationis. Opus conditionis est, quo
> factum                 est ut essent, que non erant; opus restaurationis
> est, per quod meliorata sunt, que
>                perierant. Opere conditionis factus est mundus cum suis
> elementis; opere restaurationis, Verbi incarnatio cum suis sacramentis.
</p>
>           </div>
>           <div xml:id="michael-meld-dist-div-qA5X66Ks"
> sameAs="michaelis_0002" type="distinctio">
>              <head>Sacre Scripture prestantia</head>
>              <p xml:id="michael-meld-dist-p-E1v5wA1j">Ex quo manifestum
> est, quod Scriptura cunctis aliis precellit, tum materie dignitate, tum
>                              profunditate, et subtilitate. Et si quis
> diligenter attendit, potest percipere quod omnes
>              artes, tam liberales, quam naturales, ei tanquam domine
> famulantur. </p>
>         </div>
>      </div>
>     </div>
>    </div>
>
>
> On Tue, Jul 2, 2024 at 12:41b/PM Martin Honnen martin.honnen@xxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>>
>> On 02/07/2024 12:34, Jean-Paul Rehr rehrjb@xxxxxxxxx wrote:
>>
>> Dear XSL list,
>>
>> I am trying to target a specific <head> which can appear nested within a
>> variable number of <div> and  possible <list> elements. In the three
>> examples below I have put in red the <head> element I want to target with
>> the same XSL template. In my way of thinking, it is always the first
>> appearance of <head> no matter how deep or shallow it may be nested. But I
>> am having trouble conceiving a path that can take into account the
variable
>> depth. Any thoughts about how to target this?
>>
>>
>> You can do
>>
>>   <xsl:template match="(div//head)[1]">
>>
>> in XSLT 3 (if the processor is up to it, I think early Saxon releases
>> like 9.8 or 9.9 that are no longer supported, didn't support it, but
>> current releases (11 and 12) certainly do.
>>
>>
>> fiddle link
>>
<https://martin-honnen.github.io/cheerpj3-saxonhe12-fiddle/?code=%3C%3Fxml+ve
rsion%3D%221.0%22+encoding%3D%22utf-8%22%3F%3E%0A%3Cxsl%3Astylesheet+xmlns%3A
xsl%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2FXSL%2FTransform%22%0A++version%3D%2
23.0%22%0A++xmlns%3Axs%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%0A+
+exclude-result-prefixes%3D%22%23all%22%0A++expand-text%3D%22yes%22%3E%0A++%0
A++%3Cxsl%3Atemplate+match%3D%22%28div%2F%2Fhead%29%5B1%5D%22%3E%0A++++%3Cxsl
%3Acomment%3EMatched+%7Bnode-name%28%29%7D%3C%2Fxsl%3Acomment%3E%0A++++%3Cxsl
%3Anext-match%2F%3E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A++%3Cxsl%3Aoutput+method
%3D%22html%22+indent%3D%22no%22+html-version%3D%225%22%2F%3E%0A%0A++%3Cxsl%3A
mode+on-no-match%3D%22shallow-copy%22%2F%3E%0A%0A++%3Cxsl%3Atemplate+match%3D
%22%2F%22+name%3D%22xsl%3Ainitial-template%22%3E%0A++++%3Cxsl%3Acopy%3E%0A+++
+++%3Cxsl%3Aapply-templates%2F%3E%0A++++++%3Cxsl%3Acomment%3ERun+with+%7Bsyst
em-property%28%27xsl%3Aproduct-name%27%29%7D+%7Bsystem-property%28%27xsl%3Apr
oduct-version%27%29%7D+at+%7Bcurrent-dateTime%28%29%7D%3C%2Fxsl%3Acomment%3E%
0A++++%3C%2Fxsl%3Acopy%3E%0A++%3C%2Fxsl%3Atemplate%3E%0A%0A%3C%2Fxsl%3Astyles
heet%3E%0A&input=%3Croot%3E%0A++++%3Cdiv%3E%0A++++++++%3Cdiv%3E%0A+++++++++++
+%3Cdiv%3E%0A++++++++++++++++++%3Chead%3ETitle%3C%2Fhead%3E+%3C%21--+nested+i
n+3+divs+--%3E%0A++++++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A++++++++++
+++%3C%2Fdiv%3E%0A++++++++%3C%2Fdiv%3E%0A++++++++%3Cdiv%3E%0A+++++++++++++%3C
head%3ETitle%3C%2Fhead%3E%0A++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A+++
++++++%3C%2Fdiv%3E%0A++++%3C%2Fdiv%3E%0A%0A++++%3Cdiv%3E%0A+++++++++++%3Cdiv%
3E%0A++++++++++++++++++%3Chead%3ETitle%3C%2Fhead%3E+%3C%21--+nested+in+2+divs
+--%3E%0A++++++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A++++++++++++%3C%2F
div%3E%0A++++++++++++%3Cdiv%3E%0A++++++++++++++++++%3Chead%3ETitle%3C%2Fhead%
3E%0A++++++++++++++++++%3Cp%3Esome+content%3C%2Fp%3E%0A+++++++++++%3C%2Fdiv%3
E%0A+++%3C%2Fdiv%3E%0A%0A++++%3Cdiv%3E%0A++++++++%3Cdiv%3E%0A++++++++++++%3Cd
iv%3E%0A+++++++++++++++++%3Clist%3E%0A++++++++++++++++++++++%3Chead%3ETitle%3
C%2Fhead%3E+%3C%21--+nested+in+3+divs+and+list+--%3E%0A++++++++++++++++++++++
%3Citem%3E%3C%2Fitem%3E%0A++++++++++++++++++++++%3Citem%3E%3C%2Fitem%3E%0A+++
++++++++++++++%3C%2Flist%3E%0A+++++++++++++%3C%2Fdiv%3E%0A+++++++++++++%3Cdiv
%3E%0A+++++++++++++++++%3Chead%3ETitle%3C%2Fhead%3E%0A+++++++++++++++++%3Cp%3
Esome+content%3C%2Fp%3E%0A+++++++++++++%3C%2Fdiv%3E%0A++++++++%3C%2Fdiv%3E%0A
++++%3C%2Fdiv%3E%0A%3C%2Froot%3E%0A&code-type=XSLT&input-type=XML>
>>
>>
>>
>>
>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/3377836> (by
>> email)
>>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/3318727> (by
> email)
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/3377836> (by
> email <>)

Current Thread