在我的工作中,我遇到了一个小虫子。只需要在一个小文本部分下划线。 但是我在尝试添加标签时遇到错误。 它给我错误报告,它不是一个有效的孩子。
错误如下:
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 :(得分:1)
您的fo:inline
应位于fo:block
或类似内容中。
如果您查看fo:flow
(https://www.w3.org/TR/xsl/#fo_flow)的定义,您会看到其内容模型为(%block;)+
。如果您按照从%block;
到其定义的链接,您会看到块级FO是:
您还可以将fo:float
或任何“中立容器”用作fo:flow
的孩子。
在所有这些中,只有fo:block
可以直接包含fo:inline
。
如果您使用oXygen XML编辑器,则可以使用 focheck (https://github.com/AntennaHouse/focheck)验证您的FO文件,然后再将其提交给您的FO处理器。