xsl-list
[Top] [All Lists]

[xsl] Apply Comment Position

2021-02-25 23:13:47
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.


INPUT --
<article>
<article-meta>
<!--xmltex \gdef\EmailAuthIdDefnI{\MailAuthIdI}-->
<ext-link ext-link-type="email" id="42em1">hadiao@nencn</ext-link>
<!--xmltex \gdef\EmailAuthIdDefnII{\MailAuthIdII}-->
<ext-link ext-link-type="email" id="42em2">uip(_at_)gmail(_dot_)com</ext-link>
<!--xmltex \gdef\EmailAuthIdDefnII{\MailAuthIdII}-->
<ext-link ext-link-type="email" id="42em3">gyuliu@hkbu</ext-link>
<ext-link ext-link-type="email" id="em4">90727(_at_)qq(_dot_)com</ext-link>
<!--xmltex \gdef\EmailAuthIdDefnIV{\MailAuthIdIV}-->
<ext-link ext-link-type="email" id="em5">sdu(_at_)math(_dot_)hk</ext-link>
</article-meta>
</article>
REQUIRED OUTPUT: --

<article>
   <article-meta>
      <cp id="42em1">
         <email>hadiao@nencn<!--xmltex
\gdef\EmailAuthIdDefnI{\MailAuthIdI}--></email>
      </cp>
      <cp id="42em2">
         <email>uip(_at_)gmail(_dot_)com<!--xmltex
\gdef\EmailAuthIdDefnII{\MailAuthIdII}--></email>
      </cp>
      <cp id="42em3">
         <email>gyuliu@hkbu<!--xmltex
\gdef\EmailAuthIdDefnII{\MailAuthIdII}--></email>
      </cp>
      <cp id="em4">
         <email>90727(_at_)qq(_dot_)com<!--xmltex
\gdef\EmailAuthIdDefnIV{\MailAuthIdIII}--></email>
      </cp>
      <cp id="em5">
         <email>sdu(_at_)math(_dot_)hk<!--xmltex
\gdef\EmailAuthIdDefnIV{\MailAuthIdIV}--></email>
      </cp>
   </article-meta>
</article>

My XSLT: --

<xsl:template match="article">
<article>
<xsl:apply-templates/>
</article>
</xsl:template>

<xsl:template match="article-meta">
<xsl:element name="article-meta">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="comment()">
<xsl:copy/>
</xsl:template>

<xsl:template match="ext-link[position()=1]">
<xsl:if test="@ext-link-type='email'[position()=1]">
<xsl:element name="cp">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>

<email>
<xsl:apply-templates/>
<xsl:apply-templates
select="ancestor-or-self::article-meta/comment()[matches(.,
'EmailAuthIdDefn')][position()=1]"/>
</email>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template match="ext-link[position()=2]">
<xsl:if test="@ext-link-type='email'[position()=1]">
<xsl:element name="cp">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<email>
<xsl:apply-templates/>
<xsl:apply-templates
select="ancestor-or-self::article-meta/comment()[matches(.,
'EmailAuthIdDefn')][position()=2]"/>
</email>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template match="ext-link[position()=3]">
<xsl:if test="@ext-link-type='email'[position()=1]">
<xsl:element name="cp">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<email>
<xsl:apply-templates/>
<xsl:apply-templates
select="ancestor-or-self::article-meta/comment()[matches(.,
'EmailAuthIdDefn')][position()=3]"/>
</email>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template match="ext-link[position()=4]">
<xsl:if test="@ext-link-type='email'[position()=1]">
<xsl:element name="cp">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<email>
<xsl:apply-templates/>
<xsl:apply-templates
select="ancestor-or-self::article-meta/comment()[matches(.,
'EmailAuthIdDefn')][position()=4]"/>
</email>
</xsl:element>
</xsl:if>
</xsl:template>
<xsl:template match="ext-link[position()=5]">
<xsl:if test="@ext-link-type='email'[position()=1]">
<xsl:element name="cp">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<email>
<xsl:apply-templates/>
<xsl:apply-templates
select="ancestor-or-self::article-meta/comment()[matches(.,
'EmailAuthIdDefn')][position()=5]"/>
</email>
</xsl:element>
</xsl:if>
</xsl:template>

Thanks
Byomokesh
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>