2011-08-12 8 views
8

xslt dosyasını xsl-fo'ya dönüştürmem gereken xslt dosyası oluşturuyorum. Tabiiİç içe kalın/italik etiketli XSL-FO oluşturmak için XSLT'yi kullanma

<doc> 
    <par> 
    <point> 
     <text>some text</text> 
    </point> 
    </par> 
</doc> 

birçok paragraflar ve noktalar belgede vardır:

XML böyle bir şeydir.

<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo"> 
    <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/> 
    <xsl:param name="versionParam" select="'1.0'"/> 
    <xsl:template match="doc"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm"> 
      <fo:region-body margin="2cm"/> 
      <fo:region-before margin="0.2cm" extent="1.5cm"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="simpleA4"> 
     <fo:static-content flow-name="xsl-region-before" margin-right="1cm"> 
      <fo:block text-align="start" margin-top="0.2cm"> 
      <fo:block text-align="end" margin-top="0.2cm"> 
       Page <fo:page-number/> of <fo:page-number-citation ref-id="terminator"/> 
      </fo:block> 
     </fo:static-content> 
     <fo:flow flow-name="xsl-region-body"> 
      <xsl:apply-templates select="par/point"/> 
      <fo:block id="terminator"/> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 
    <xsl:template match="point"> 
    <fo:block font-size="16pt" space-after="5mm"> 
     <xsl:value-of select="tresc"/> 
    </fo:block> 
    </xsl:template> 
</xsl:stylesheet> 

olmalı: Ben

<bold>bolded text</bold> and <italic>italic</italic> 

Şimdi

<fo:block><fo:inline font-weight="bold">bolded text</fo:inline> and <fo:inline font-style="italic">italic</fo:inline> 

Ben böyle oldukça basit xslt belge, vermeli örneğin

için, "Bazı metin" biçimlendirmek için olasılığını eklemek istiyorum Başka bir şablon ekledim (kalın, italik)? Bunu "metin" düğümünde nasıl arayayım?

Bazı çözüm buldu:

<xsl:template match="//bold"> 
    <fo:inline font-weight="bold"> 
     <xsl:value-of select="current()"></xsl:value-of> 
    </fo:inline> 
</xsl:template> 

Ama bu benim için işe yaramadı. Çıkış xsl-fo, herhangi bir fo içermiyor: satır içi.

cevap

9

Bu örneğe bakın. Satır içi düğümlerin nasıl kaldırılacağını açıkça gösterir.

[XSLT 1.0] verilen

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="doc"> 
     <fo:root> 
      <fo:page-sequence> 
       <fo:flow> 
        <xsl:apply-templates select="par/point"/> 
       </fo:flow> 
      </fo:page-sequence> 
     </fo:root> 
    </xsl:template> 

    <xsl:template match="point"> 
     <fo:block font-size="16pt" space-after="5mm"> 
      <xsl:apply-templates select="node()"/> 
     </fo:block> 
    </xsl:template> 

    <xsl:template match="bold"> 
     <fo:inline font-weight="bold"> 
      <xsl:apply-templates select="node()"/> 
     </fo:inline> 
    </xsl:template> 

    <xsl:template match="italic"> 
     <fo:inline font-style="italic"> 
      <xsl:apply-templates select="node()"/> 
     </fo:inline> 
    </xsl:template> 

</xsl:stylesheet> 

:

<doc> 
    <par> 
     <point> 
      <text>some <bold>bold</bold></text> 
     </point> 
    </par> 
    <par> 
     <point> 
      <text>some <italic>italic <bold>bolded</bold></italic></text> 
     </point> 
    </par> 
</doc> 

üretir:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:page-sequence> 
     <fo:flow> 
     <fo:block font-size="16pt" space-after="5mm"> 
      some <fo:inline font-weight="bold">bold</fo:inline> 
       </fo:block> 
     <fo:block font-size="16pt" space-after="5mm"> 
      some <fo:inline font-style="italic">italic <fo:inline font-weight="bold">bolded</fo:inline> 
      </fo:inline> 
       </fo:block> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 
+0

'gereksiz = "() düğüm" seçin. Http://www.w3.org/TR/xslt#section-Applying-Template-Rules adresinden: "select" özelliğinin yokluğunda, xsl: apply-templates 'komutu tüm çocukların metin düğümleri de dahil olmak üzere geçerli düğüm. " –