2016-04-05 25 views
0

Aşağıdaki özlü tablo notları ile girdisi olan satır için bir öznitelik türü = "alt çizgi" eklemek istiyorum, bunu yaptım.Ancak soru, birleştirilmiş sütunlar varsa, eklemek zorundayım Ayrıca bu girişlere type = "bottom line" ve giriş sayısı eşit olduğunda bu ekleme durmalıdır.Özyineleme XSLT 2

Girdi XML

<table> 
    <row> 
     <entry id="1"></entry> 
     <entry id="2"></entry> 
     <entry id="3" merged="1"></entry> 
     <entry id="4"></entry> 
     <entry id="5"></entry> 
    </row> 
    <row> 
     <entry id="1"></entry> 
     <entry id="2"></entry> 
     <entry id="3" merged="1"></entry> 
     <entry id="4"></entry> 
     <entry id="5"></entry> 
    </row> 
    <row> 
     <entry id="6" merged="1"></entry> 
     <entry id="7"></entry> 
     <entry id="8"></entry> 
     <entry id="9"></entry> 
    </row> 

    <row> 
     <entry id="10"></entry> 
     <entry id="11"></entry> 
     <entry id="12"></entry> 
     <entry id="13"></entry> 

     <entry id=“14"></entry> 

    </row> 
    <row> 
     <entry id="15"></entry> 
     <entry id="16"></entry> 
     <entry id="17"></entry> 
    </row> 
    <row> 
     <entry type="table notes">test</entry> 
     <entry type="table notes">test</entry> 
     <entry type="table notes">test</entry> 
    </row> 
</table> 

Beklenen ÇIKIŞ

<table> 
    <row> 
     <entry id="1"></entry> 
     <entry id="2"></entry> 
     <entry id="3" merged="1"></entry> 
     <entry id="4"></entry> 
     <entry id="5"></entry> 
    </row> 
    <row> 
     <entry id="1"></entry> 
     <entry id="2"></entry> 
     <entry id="3" merged="1" type="bottom line"></entry> 
     <entry id="4"></entry> 
     <entry id="5"></entry> 
    </row> 
    <row> 
     <entry id="6" merged="1" type="bottom line"></entry> 
     <entry id="7"></entry> 
     <entry id="8"></entry> 
     <entry id="9"></entry> 
    </row> 

    <row> 
     <entry id="10"></entry> 
     <entry id="11"></entry> 
     <entry id="12"></entry> 
     <entry id="13"></entry> 

     <entry id="14"></entry> 

    </row> 
    <row> 
     <entry id="15" type="bottom line"></entry> 
     <entry id="16" type="bottom line"></entry> 
     <entry id="17" type="bottom line"></entry> 
    </row> 
    <row> 
     <entry type="table notes">test</entry> 
     <entry type="table notes">test</entry> 
     <entry type="table notes">test</entry> 
    </row> 
</table> 

Bugüne kadar yazdığı XSLT:

  • tablo

    notları alt satırı ekleyin

    <xsl:template match="row/entry[@merged]" mode="merged"> 
        <xsl:copy> 
         <xsl:apply-templates select="@*"/> 
         <xsl:attribute name="type">bottom line</xsl:attribute> 
         <xsl:apply-templates/> 
        </xsl:copy> 
        <xsl:apply-templates/> 
    </xsl:template> 
    
    <xsl:template match="row[last()-1]"> 
        <xsl:if test="count(./entry) &gt; count(./preceding-sibling::row/entry)"> 
         <xsl:apply-templates mode="merged"/> 
        </xsl:if> 
    </xsl:template> 
    

    beni bu sorunu çözmek için yardım edin Birleştirilmiş girişler için 363.210 alt çizgi

. teşekkürler ..

cevap

1

XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xsl:output method="xml" indent="yes"/> 
    <!-- identity transform template --> 
    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <!-- change the desired elements --> 
    <xsl:template match="row[following-sibling::*[1]/entry/@type = 'table notes']/entry | entry[@merged]"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*"/> 
      <xsl:attribute name="type">bottom line</xsl:attribute> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

ilk şablon kimlik şablonu tüm özellikleri ve düğümlerin kopyalamak için dönüşümüdür. İkinci şablon, istenen öğelere @type ekler.

+0

Tüm giriş [@merged] için alt satır eklenir, ancak bunu kısıtlamak istiyorum. Geçerli satır girdileri önceki satır girişlerine eşit olarak sayılırsa, bu özellik eklenmemelidir. Bu konuda herhangi bir fikir var. . – user2490093

+0

@ user2490093 Bunu anlamadım. Lütfen daha fazlasını açıklayabilir misiniz? Beklenen çıktınız yorum yaptı mı? –