2016-11-16 163 views
0

在我的工作中,iv有一个小错误。只需要强调一个小文本部分。 但当我试图添加标签时出现错误。 它给我的错误报告,它不是一个有效的孩子。无法将<fo:inline>元素添加到我的xsl中

的错误如下:

Caused by: javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: "fo:inline" is not a valid child of "fo:flow"! (See fo:flow, "Mademoiselle ADS S, 1, 10000 TRO...") 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2304) 
    at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:682) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) 
    at org.apache.xalan.templates.ElemTemplate.execute(ElemTemplate.java:393) 
    at org.apache.xalan.templates.ElemCallTemplate.execute(ElemCallTemplate.java:247) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) 
    at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:682) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) 
    at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:682) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) 
    at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:682) 
    at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336) 
    at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2202) 
    at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1276) 
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:673) 
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1192) 
    at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1170) 
    at com.albiran.ebiza.utilitaires.PDFGenerator.produceXMLData(PDFGenerator.java:117) 
    at com.satec.pdf.SAPDFGenerator.generatePDF(SAPDFGenerator.java:163) 
    at com.albiran.ebiza.envoi.AsyncAttachment.getPath(AsyncAttachment.java:41) 
    ... 3 more 

而且XSL文件如下:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:import href="SAPdfUtils.xsl" /> 
    <xsl:output method="xml" encoding="ISO-8859-1" /> 

    <xsl:template match="/"> 
     <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
      <!-- ******************************** Déclaration, des pages ************************** --> 
      <fo:layout-master-set> 
       <fo:simple-page-master master-name="mainpage" 
        page-width="21cm" page-height="29.7cm" margin-top="1cm" 
        margin-bottom="1cm" margin-left="1cm" margin-right="1cm"> 
        <fo:region-body region-name="xsl-region-body" 
         extent="0cm" margin-top="5cm" margin-bottom="2.5cm" margin-left="2cm" 
         margin-right="2cm" /> 
       </fo:simple-page-master> 
      </fo:layout-master-set> 

      <fo:page-sequence master-reference="mainpage" 
       font-family="Arial"> 

       <!-- ******************************** Body ************************** --> 
       <fo:flow flow-name="xsl-region-body" font-size="12pt" 
        font-family="Arial" text-align="justify"> 

        <!-- Page 1 --> 
        <xsl:call-template name="break" /> 
        <xsl:call-template name="page1" /> 
        <fo:block break-after="page" /> 

       </fo:flow> 
      </fo:page-sequence> 
     </fo:root> 
    </xsl:template> 

    <xsl:template name="page1"> 
     <fo:table table-layout="fixed"> 
      <fo:table-column column-width="60%" /> 
      <fo:table-column column-width="40%" /> 
      <fo:table-body> 
       <fo:table-row text-align="left" font-weight="bold"> 
        <xsl:call-template name="cellBreak" /> 
        <fo:table-cell> 
         <fo:block> 
          <xsl:value-of select="/document/contractor/nameLong" /> 
         </fo:block> 
         <xsl:call-template name="break" /> 
         <fo:block> 
          <xsl:value-of select="/document/contractor/road" /> 
         </fo:block> 
         <xsl:call-template name="break" /> 
         <fo:block> 
          <xsl:value-of select="/document/contractor/city" /> 
         </fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 
     <fo:block text-align="right"> 
      Paris, le 
      <xsl:value-of select="/document/date" /> 
     </fo:block> 
     <xsl:call-template name="break" /> 

     <fo:block font-weight="bold"> 
      Votre référence client : N° 
      <xsl:value-of select="/document/contractor/id" /> 
     </fo:block> 
     <fo:block font-weight="bold"> 
      N° de contrat : 
      <xsl:value-of select="/document/policy/id" /> 
     </fo:block> 
     <fo:block font-weight="bold"> 
      Intitulé du produit : 
      <xsl:value-of select="/document/policy/productName" /> 
     </fo:block> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 


      <fo:inline text-decoration="underline"> 
      Objet : Remise en vigueur de votre contrat d’assurance. 
      </fo:inline> 

     <fo:block padding="-10px"> 
      <fo:leader leader-length="90%" leader-pattern="rule" 
       rule-style="solid" rule-thickness="0.1mm" color="black" /> 
     </fo:block> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 

     <fo:block> 
      <xsl:value-of select="/document/contractor/longTitle" /> 
      <xsl:text>,</xsl:text> 
     </fo:block> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 

     <fo:block> 
      Suite à votre règlement du 
      <xsl:value-of select="/document/dateOfThePayment" /> 
      de votre prime de 
      <xsl:value-of select="/document/unpaidAmount" /> 
      <xsl:call-template name="space" /> 
      <xsl:text>€</xsl:text> 
      <xsl:call-template name="space" /> 
      pour la période du 
      <xsl:value-of select="/document/startDate" /> 
      au 
      <xsl:value-of select="/document/endDate" /> 
      , nous vous confirmons la remise en vigueur votre contrat d’assurance en date d’effet du 
      <xsl:value-of select="/document/reinstatementDate" /> 
      . 
     </fo:block> 
     <xsl:call-template name="break" /> 

     <fo:block> 
      Nous restons à votre disposition. 
     </fo:block> 
     <xsl:call-template name="break" /> 




     <fo:block> 
      Nous vous prions de croire, 
      <xsl:value-of select="/document/contractor/longTitle" /> 
      <xsl:text>, en l'expression de nos sentiments dévoués.</xsl:text> 
     </fo:block> 
     <xsl:call-template name="break" /> 
     <xsl:call-template name="break" /> 

     <fo:table table-layout="fixed"> 
      <fo:table-column column-width="60%" /> 
      <fo:table-column column-width="40%" /> 
      <fo:table-body> 
       <fo:table-row> 
        <xsl:call-template name="cellBreak" /> 
        <fo:table-cell> 
         <fo:block> 
          Votre Conseiller SATEC 
         </fo:block> 
         <xsl:call-template name="break" /> 
         <fo:block> 
          Tél. : 
          <xsl:value-of select="/document/satecPhone" /> 
         </fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
    </xsl:template> 

    <xsl:template name="cellBreak"> 
     <fo:table-cell> 
      <xsl:call-template name="break" /> 
     </fo:table-cell> 
    </xsl:template> 

    <xsl:template name="tableLineBreak"> 
     <fo:table-row> 
      <xsl:call-template name="cellBreak" /> 
     </fo:table-row> 
    </xsl:template> 

</xsl:stylesheet> 

我真的没有使用XSL文件可悲的是太多的经验。并且iv看到人们有这个问题,但是由于不同的原因。

非常感谢您提前和抱歉,如果我缺少一些简单或微不足道的东西,我只是不确定这里有什么问题。

+0

我本来以为已经fo:table或fo:block不应该是fo:flow的孩子。我通常将所有内容都封装在fo:block中的fo:block:container/fo:block中,但这可能是一种烦躁,直到你看起来像以前一样。 –

+0

除非我误读了某些内容,否则我们在您的XSL中看不到任何名为“break”的模板,但您始终可以调用它。 –

+0

咋....我发现了这个问题。我想要下划线的文字下的fo:block是现在的问题。这是正确的,我是盲目的。但是,谢谢你的有用信息。这也帮助了很多。 :D –

回答

1

您的fo:inline应该在fo:block或类似内。

如果你看fo:flowhttps://www.w3.org/TR/xsl/#fo_flow)的定义,你会发现它的内容模型是(%block;)+。如果你遵循从%block;其定义的链接,你会看到,块级农民组织是:

  • 块容器
  • 表和字幕
  • 列表块

您还可以使用fo:float或任何“中性容器”作为fo:flow一个孩子。

在所有这些中,只有fo:block可以直接包含fo:inline

如果您使用oXygen XML编辑器,您可以使用focheckhttps://github.com/AntennaHouse/focheck)验证您的FO文件,然后将其提交给FO处理器。

+0

我确实把它放在一个开始,但是会发生什么是块被强调并且内联也是。而且iv不知道为什么。在此之前,该街区有一个强调的财产。但是直到页面结束。我只需要加下划线的文字。所以我删除了它,并将其添加到fo:inline。 –

+0

即使我删除块和内联的每个属性。该块仍然强调...... –

相关问题