2015-04-21 96 views
2

我想停止將生成的單詞分成兩行。現在我試圖使用wrap-option =「wrap」,但沒有任何效果。 我希望有能幫助我。)xsl:fo不要將單詞分成兩行

我使用撒克遜-HE,XSLT 2.0

我的XML文件:

<root> 
    <out> 
      invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 
      <build> 
       <name>John</name> 
       <year>29</year> 
       <address>London</address> 
       <code>12345678902331234313123123123123123123</code> 
      </build>At vero eos et  
    </out> 
</root> 

我的XSLT文件:

<xsl:template match="out"> 
     <fo:block> 
       <xsl:apply-templates/> 
     </fo:block> 
    </xsl:template> 

    <xsl:template match="build"> 
     <fo:inline wrap-option="wrap" color="Red"> 
      <xsl:value-of select="concat(./name,'-',./year,'-',./address,'+',./code)"/> 
     </fo:inline> 
    </xsl:template> 

我預期產出如下:

Invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua 
John-29-London+11231231231... 

輸出與我的解決方案:

Invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua John-29 
-London+123123.. 

回答

5

如果這些是在樣式表的唯一模板,文本節點通過內置的模板處理。您不應該以不受控制的方式輸出文本。如果添加與text()匹配的空模板(如I have told you already),則build中的文本出現在一行上。

XSLT樣式表

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="/root"> 
     <fo:root> 
     <fo:layout-master-set> 
      <fo:simple-page-master master-name="page" 
      page-height="297mm" page-width="210mm" 
      margin-top="20mm" margin-bottom="10mm" 
      margin-left="25mm" margin-right="25mm"> 
      <fo:region-body 
       margin-top="0mm" margin-bottom="15mm" 
       margin-left="0mm" margin-right="0mm"/> 
      <fo:region-after extent="10mm"/> 
      </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="page"> 
      <fo:flow flow-name="xsl-region-body"> 
      <xsl:apply-templates/> 
      </fo:flow> 
     </fo:page-sequence> 
     </fo:root> 
    </xsl:template> 

    <xsl:template match="out"> 
     <fo:block> 
       <xsl:apply-templates/> 
     </fo:block> 
    </xsl:template> 

    <xsl:template match="build"> 
     <fo:inline wrap-option="wrap" color="Red"> 
      <xsl:value-of select="concat(name,'-',year,'-',address,'+',code)"/> 
     </fo:inline> 
    </xsl:template> 

    <xsl:template match="text()"/> 
</xsl:transform> 

XSL-FO輸出

<?xml version="1.0" encoding="UTF-8"?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="page" 
          page-height="297mm" 
          page-width="210mm" 
          margin-top="20mm" 
          margin-bottom="10mm" 
          margin-left="25mm" 
          margin-right="25mm"> 
     <fo:region-body margin-top="0mm" 
         margin-bottom="15mm" 
         margin-left="0mm" 
         margin-right="0mm"/> 
     <fo:region-after extent="10mm"/> 
     </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="page"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:block> 
      <fo:inline wrap-option="wrap" color="Red">John-29-London+12345678902331234313123123123123123123</fo:inline> 
     </fo:block> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 

渲染PDF輸出

enter image description here


但真正的問題是,如何防止文本從包是否確實長於一行,例如如果輸入看起來像

<code>123456789023312343131231231248364387438463846837483643123123123</code> 

然後,一個精心佈置的keep達到你想要什麼:

<xsl:template match="build"> 
    <fo:inline keep-together.within-line="always" color="Red"> 
     <xsl:value-of select="concat(./name,'-',./year,'-',./address,'+',./code)"/> 
    </fo:inline> 
</xsl:template> 

,然後文本行只是溢出頁面邊框

enter image description here

最後,keep-together,但沒有模板匹配text()

enter image description here

+0

以fo:塊包裝選項工作,但後來我有我的輸出 – Franz

+0

@Franz對不起後換行,但我真不不知道你的意思,我提出的哪些解決方案,或者你正在討論哪個換行選項,或者什麼「輸出」。 –

+0

感謝您使用它的合作屬性;) – Franz