Re: [xsl] Apply Comment Position

Subject: Re: [xsl] Apply Comment Position
From: "Michael Müller-Hillebrand mmh@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 27 Feb 2021 19:09:56 -0000
Hi,

Since I dig grouping Martinbs solution is clever and thanks for reminding me
of tail()!

Depending on the underlying logic, you might rather loop over the ext-link:

<xsl:template match="article-meta">
  <xsl:copy>
    <xsl:for-each select="ext-link">
      <cp id="{@id}">
        <email>
          <xsl:value-of select="."/>
          <!-- pull in first preceding comment -->
          <xsl:copy-of
select="preceding-sibling::node()[self::comment()][1]"/>
        </email>
      </cp>
    </xsl:for-each>
  </xsl:copy>
</xsl:template>

Happy coding,

- Michael


> Am 26.02.2021 um 08:25 schrieb Martin Honnen martin.honnen@xxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>:
>
>
> On 26.02.2021 07:22, Martin Honnen martin.honnen@xxxxxx
<mailto:martin.honnen@xxxxxx> wrote:
>>
>>
>> On 26.02.2021 06:13, Byomokesh Sahoo sahoo.byomokesh@xxxxxxxxx wrote:
>>> Hi,
>>>
>>> Please look at the below xml, xslt and required output. I tried position
function to get the comment inside <mail> in respective <ext-link>. I am
facing a problem where  ( <!--xmltex
\gdef\EmailAuthIdDefnII{\MailAuthIdII}-->) refers to two <ext-link>. Could you
please anyone help on this.
>>
>>
>> Which version of XSLT can you use? What defines a relation between a
comment "xmltext" and an "ext-link" element? Can't that just be solved by
>>
>>   <xsl:template match="article-meta">
>>
>>     <xsl:copy>
>>
>>       <xsl:for-each select="comment()[starts-with(., 'xmltext')] |
ext-link" group-starting-with="comment()">
>>
>>          <xsl:for-each select="tail(current-group())">
>>
>>             <cp id="{@id}">
>>
>>               <email>
>>
>>                  <xsl:copy-of select="node(), current-group()[1]"/>
>>
>>             </email>
>>
>>          </cp>
>>
>>      </xsl:for-each-group>
>>
>>   </xsl:copy>
>>
>> </xsl:template>
>>
>
> So that should have been
>
>
>    <xsl:template match="article-meta">
>       <xsl:copy>
>         <xsl:for-each-group select="comment()[starts-with(., 'xmltex')] |
ext-link" group-starting-with="comment()">
>            <xsl:for-each select="tail(current-group())">
>               <cp id="{@id}">
>                 <email>
>                    <xsl:copy-of select="node(), current-group()[1]"/>
>                 </email>
>               </cp>
>             </xsl:for-each>
>        </xsl:for-each-group>
>     </xsl:copy>
>   </xsl:template>
>
>
> really, sorry, it seems without an editor I am not able to type well-formed
and intended XSLT

Current Thread