2016-03-26 14 views
-1

Aşağıda xml patern örneğimi görebilirsiniz. Her manuelbölüm etiket bulunsa, bölüm etiketler ALTBÖLÜM ve kontrol listesini etiketleri olabilir. Statik derinlik yoktur, belgeyi belgeye göre değiştirebilir, bu yüzden HTML'yi oluşturmak için dinamik özyinelemeli xslt kodunu yazamadım. Birisi biliyor mu, bunu nasıl sağlayabilirim?Dinamik ağaç için XSLT

<manuel name="Test"> 
    <chapter name="00"> 

     <subchapter name="00.01"> 
     <checklist name="00.01.01"> 
      <summary>abc</summary> 
     </checklist> 
     </subchapter> 

     <subchapter name="00.02"> 
      <checklist name="00.02.01"> 
       <summary>def</summary> 
      </checklist> 
      <subchapter name="00.02.02"> 
       <checklist name="00.02.02.01"> 
        <summary>xyz</summary> 
       </checklist> 
      </subchapter> 
     </subchapter> 

     <checklist name="00.03"> 
      <summary>ZZZZ</summary> 
     </checklist> 
    </chapter> 
    </manuel> 

Bu örnek için, bu sonucu varsayalım. CSS stilini ayarlayabilirim, şu an önemli değil. Sorun yapıyı oluşturuyor.

<div class="cssChapter"> 00</div> 
<div class="cssSubChapter"> 00.01 </div> 
<div class="cssCheckList"> 00.01.01 </div> 
<div class="cssSummary"> abc </div>  
<div class="cssSubChapter"> 00.02 </div> 
<div class="cssCheckList"> 00.02.01 </div> 
<div class="cssSummary"> def </div>  
<div class="cssSubChapter"> 00.02.02 </div> 
<div class="cssCheckList"> 00.02.02.01 </div> 
<div class="cssSummary"> xyz </div>  
<div class="cssCheckList"> 00.03 </div>  
<div class="cssSummary"> ZZZZ</div>  
+2

Çıktınızın nasıl görünmesi gerekiyor? Şimdiye kadar ne denediniz? –

+0

Söz konusu sonucu ekledim ama önemli nokta generleme yapısı. – Erkan

+0

@ KimHomann'ın sorusunu yeniden sormak için. Bu bir metin/csv/xml/html/diğer çıktı mı? – Parfait

cevap

0

basit uygulamak-şablonlarını kullanın:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:output method="html" indent="yes"/> 

<xsl:template match="manuel"> 
    <xsl:apply-templates select=".//*"/> 
</xsl:template> 

<xsl:template match="chapter"> 
    <div class="cssChapter"> 
     <xsl:value-of select="@name"/> 
    </div> 
</xsl:template> 

<xsl:template match="subchapter"> 
    <div class="cssSubChapter"> 
     <xsl:value-of select="@name"/> 
    </div> 
</xsl:template> 

<xsl:template match="checklist"> 
    <div class="cssChecklist"> 
     <xsl:value-of select="@name"/> 
    </div> 
</xsl:template> 

<xsl:template match="summary"> 
    <div class="cssSummary"> 
     <xsl:value-of select="."/> 
    </div> 
</xsl:template> 

</xsl:transform> 

Çevrimiçi http://xsltransform.net/3NJ3915/1 de.

+0

Bu kod Çalışır iyi ama tüm özet etiketlerinin içeriğini kopyala birlikte almam gerekiyor. Özet etiket içeriğine ulaşamıyorum. I gues çünkü Bu tanımı nasıl değiştirmeliyim. Çıktının özet etiketini eklemeyi unuttum, şimdi ekledim. – Erkan

+0

Kod örneğini düzenledim, şimdi basitçe tüm descendant öğelerini './/*' ile işliyor ve stil sayfasının 'özet' elemanları için bir şablonu var. –