问题描述
我们正试图用出口FOP一个PDF文件时收到一个错误:
重度:异常
org.apache.fop.apps.FOPException:org.apache.fop.fo.ValidationException:FO:列表项不是FO:列表项体的有效孩子! (无上下文信息)
javax.xml.transform.TransformerException中:org.apache.fop.fo.ValidationException:FO:列表项不是FO:列表项体的有效孩子! (无上下文信息可用)
从我可以告诉我们的XSL看起来像它应该运行。下面是来自XSL的摘录。
<的xsl:模板匹配=OL模式=一节体 >\r
< FO:单块保持在一起=总是>\r
< FO:列表项>\r
< FO:列表项,标签>\r
< / FO:列表项,标签>\r
< FO:列表项体>\r
< XSL:申请模板选择=礼模式=一节体/>\r
< / FO:列表项体>\r
< / FO:列表项>\r
< / FO:单块>\r
< / XSL:模板>\r
\r
<的xsl:模板匹配=UL模式=一节体>\r
< FO:单块临时距离之间-开始=40毫米内容宽度=2.5英寸>\r
< FO:列表项>\r
< FO:列表项,标签>\r
< / FO:列表项,标签>\r
< FO:列表项体>\r
< XSL:申请模板选择=礼模式=一节体/>\r
< / FO:列表项体>\r
< / FO:列表项>\r
< / FO:单块>\r
< / XSL:模板>\r
\r
<的xsl:模板匹配=礼模式=一节体>\r
< XSL:元素名称=FO:列表项>\r
\r
<的xsl:if测试=位置()=上()>\r
\r
< / XSL:如果>\r
< FO:列表项,标签>\r
< XSL:选择>\r
<的xsl:when测试=父:: OL>\r
< XSL:元素名称=FO:块使用属性集=列表的标记号>< XSL:选择=CONCAT('。'位置())/&GT值的;< / XSL:组件>\r
< / XSL:当>\r
<的xsl:否则>\r
< XSL:元素名称=FO:块使用属性集=列表的标记>&•LT / XSL:组件>\r
< / XSL:否则>\r
< / XSL:选择>\r
< / FO:列表项,标签>\r
< FO:列表项体>\r
< XSL:选择>\r
<的xsl:when测试=父:: OL>\r
< XSL:元素名称=FO:块使用属性集=列表项数>\r
< XSL:申请模板模式=一节体/>\r
< / XSL:组件>\r
< / XSL:当>\r
<的xsl:否则>\r
< XSL:元素名称=FO:块>\r
< XSL:申请模板模式=一节体/>\r
< / XSL:组件>\r
< / XSL:否则>\r
< / XSL:选择>\r
< / FO:列表项体>\r
< / XSL:组件>\r
< / XSL:模板>
\r
您的模板醇
和 UL
这两个产生:
< FO:单块保持在一起=总是>
< FO:列表项>
< FO:列表项,标签>
< / FO:列表项,标签>
< FO:列表项体>
< - 加工 - LT的结果;李>去这里! - >
< / FO:列表项体>
< / FO:列表项>
< / FO:单块>
和每里
生成一个 FO:包含列表项
的 FO:列表项标签
和 FO:列表项体
如果您删除 FO:列表项
, FO:列表项标签
和 FO:列表项体
从醇
和 UL
模板
<的xsl:模板匹配=OL模式=一节体>
< FO:单块保持在一起=总是>
< XSL:申请模板选择=礼模式=一节体/>
< / FO:单块>
< / XSL:模板><的xsl:模板匹配=UL模式=一节体>
< FO:单块临时距离之间-开始=40毫米内容宽度=2.5英寸>
< XSL:申请模板选择=礼模式=一节体/>
< / FO:单块>
< / XSL:模板>
那么你就不会产生 FO:列表项
内的 FO:列表项体
。
如果你想尝试验证您FO FOP之外,那么我建议的 focheck 是在
We're getting an error when trying to export a PDF with fop:
SEVERE: Exceptionorg.apache.fop.apps.FOPException: org.apache.fop.fo.ValidationException: "fo:list-item" is not a valid child of "fo:list-item-body"! (No context info available)javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: "fo:list-item" is not a valid child of "fo:list-item-body"! (No context info available)
From what I can tell our XSL looks like it should run. Here's an excerpt from the XSL.
<xsl:template match="ol" mode="section-body">
<fo:list-block keep-together="always">
<fo:list-item>
<fo:list-item-label>
</fo:list-item-label>
<fo:list-item-body>
<xsl:apply-templates select="li" mode="section-body" />
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</xsl:template>
<xsl:template match="ul" mode="section-body">
<fo:list-block provisional-distance-between-starts="40mm" content-width="2.5in">
<fo:list-item>
<fo:list-item-label>
</fo:list-item-label>
<fo:list-item-body>
<xsl:apply-templates select="li" mode="section-body"/>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</xsl:template>
<xsl:template match="li" mode="section-body">
<xsl:element name="fo:list-item">
<xsl:if test="position() = last()">
</xsl:if>
<fo:list-item-label>
<xsl:choose>
<xsl:when test="parent::ol">
<xsl:element name="fo:block" use-attribute-sets="list-marker-number"><xsl:value-of select="concat(position(),'.')" /></xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="fo:block" use-attribute-sets="list-marker">•</xsl:element>
</xsl:otherwise>
</xsl:choose>
</fo:list-item-label>
<fo:list-item-body>
<xsl:choose>
<xsl:when test="parent::ol">
<xsl:element name="fo:block" use-attribute-sets="list-item-number">
<xsl:apply-templates mode="section-body"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="fo:block">
<xsl:apply-templates mode="section-body"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</fo:list-item-body>
</xsl:element>
</xsl:template>
Your templates for ol
and ul
both generate:
<fo:list-block keep-together="always">
<fo:list-item>
<fo:list-item-label>
</fo:list-item-label>
<fo:list-item-body>
<-- Result of processing <li> goes here! -->
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
and each li
generates an fo:list-item
that contains an fo:list-item-label
and an fo:list-item-body
.
If you remove the fo:list-item
, fo:list-item-label
, and fo:list-item-body
from your ol
and ul
templates:
<xsl:template match="ol" mode="section-body">
<fo:list-block keep-together="always">
<xsl:apply-templates select="li" mode="section-body" />
</fo:list-block>
</xsl:template>
<xsl:template match="ul" mode="section-body">
<fo:list-block provisional-distance-between-starts="40mm" content-width="2.5in">
<xsl:apply-templates select="li" mode="section-body"/>
</fo:list-block>
</xsl:template>
then you won't be generating an fo:list-item
inside an fo:list-item-body
.
If you want to try validating your FO outside of FOP, then I suggest focheck at https://github.com/AntennaHouse/focheck
这篇关于错误导出带FOP&QUOT PDF,FO:列表项&QUOT;不是&QUOT有效的小孩; FO:列表项,身体QUOT;!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!