尝试使用fop导出PDF时出现错误:
严重:例外 org.apache.fop.apps.FOPException:org.apache.fop.fo.ValidationException:" fo:list-item"不是" fo:list-item-body"的有效孩子! (没有上下文信息) javax.xml.transform.TransformerException:org.apache.fop.fo.ValidationException:" fo:list-item"不是" fo:list-item-body"的有效孩子! (没有上下文信息)
从我可以告诉我们的XSL看起来应该运行。这是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>
&#13;
答案 0 :(得分:2)
ol
和ul
的模板都会生成:
<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>
并且每个li
生成一个fo:list-item
,其中包含fo:list-item-label
和fo:list-item-body
。
如果您从fo:list-item
和fo:list-item-label
模板中移除fo:list-item-body
,ol
和ul
:
<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>
然后您不会在fo:list-item
内生成fo:list-item-body
。
如果您想尝试在FOP之外验证您的FO,那么我建议https://github.com/AntennaHouse/focheck
focheck