2015-04-23 3 views
1

У меня есть следующий XML.Подсчитать предшествующие элементы игнорировать узел

<nd> 
      <fn> 
       <fnn>*</fnn> 
       <fnt> 
        <p> 
         <i>ftn 1</i> 
        </p> 
       </fnt> 
      </fn> 
      <ti> 
       <fn> 
        <fnn>*</fnn> 
        <fnt> 
         <p> 
          <i>ftn 1</i> 
         </p> 
        </fnt> 
       </fn> 
      </ti> 
      <tx> 
       <fn> 
        <fnn>1</fnn> 
        <fnt> 
         <p> 
          <i>ftn2</i> 
         </p> 
        </fnt> 
       </fn> 
       <fn> 
        <fnn>2</fnn> 
        <fnt> 
         <p> 
          <i>ftn3</i> 
         </p> 
        </fnt> 
       </fn> 
      </tx> 
     </nd> 

Здесь я хочу, чтобы подсчитать предыдущую fnn и создание сносок, но здесь я хочу preceding::tx Игнорировать регистр. Я использую ниже XSLT.

<xsl:template match="/"> 
     <hmtl> 
     <head> 
      <title>New Version!</title> 
     </head> 
     <xsl:apply-templates/> 
      <xsl:if test="//fnn"> 
        <section class="tr_footnotes"> 
         <xsl:text disable-output-escaping="yes"><![CDATA[<hr />]]></xsl:text> 
         <xsl:apply-templates select="//page|//fnt" mode="footnote"/> 
        </section> 
       </xsl:if> 
     </hmtl> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="fnn"> 
      <xsl:variable name="count" select="count(preceding::fnn)"/> 
     <xsl:variable name="varHeaderNote" select='concat("f",$count)'/> 
     <xsl:variable name="varFootNote" select='concat("#ftn.",$count)'/> 
     <sup> 
      <a name="{$varHeaderNote}" href="{$varFootNote}" class="tr_ftn"> 
       <xsl:value-of select="."/> 
      </a> 
     </sup> 
    </xsl:template> 
     <xsl:template match="ti"/> 

    <xsl:template match="fnt" mode="footnote"> 
     <xsl:variable name="count" select="count(preceding::fnn)"/> 
     <div class="tr_footnote"> 
      <div class="footnote"> 
       <sup> 
        <a> 
         <xsl:attribute name="name"><xsl:text>ftn.</xsl:text><xsl:value-of select="$count"/></xsl:attribute> 
         <xsl:attribute name="href"><xsl:text>#f</xsl:text><xsl:value-of select="$count"/></xsl:attribute> 
         <xsl:attribute name="class"><xsl:text>tr_ftn</xsl:text></xsl:attribute> 
         <xsl:value-of select="$count"/> 
        </a> 
       </sup> 
       <xsl:apply-templates/> 
      </div> 
     </div> 
    </xsl:template> 

Здесь я в состоянии игнорировать ti с помощью <xsl:template match="ti"/>, но в Тхет рассчитывать рассматривает fnn внутри ti, здесь я хочу, чтобы его игнорировать и считать. И в разделе сносок я не могу игнорировать его.

Здесь в разделе головы.

После ftn.0 он порождает ftn.2, но я хочу, чтобы это было ftn 1

И в разделе сносок есть ftn.1 и ftn.2 (Это сноска из ti), и это должно быть проигнорировано.

, пожалуйста, дайте мне знать, как я могу это исправить.

Вот working Demo

Спасибо.

ответ

0

Я думаю, что вы можете изменить значение счетчика на:

<xsl:variable name="count" select="count(preceding::fnn[not(ancestor::ti)])"/> 
+0

Это не работает в сносках разделе – user3872094

+0

Я не уверен, чтобы понять укомплектовать в OBJECTIF, но попробовать этот метод: http://xsltransform.net/6qVRKww/8. У него, конечно, есть более простой способ, но он не требует изменения всего кода. Необходимо изменить счетчик и получить шаблон для сноски режима, с предикатом к fnt. –

Смежные вопросы