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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] targeting the 'first' ins, David Birnbaum djbpi | Thread | Re: [xsl] targeting the 'first' ins, David Carlisle d.p.c |
Re: [xsl] targeting the 'first' ins, David Birnbaum djbpi | Date | Re: [xsl] targeting the 'first' ins, Martin Honnen martin |
Month |