我有一行,其中一列有一个数据列表。假设我有一行,第三列有0或更多行。<xsl:for-each select="./parts">,由于某些原因,我的代码似乎不起作用。我不知道如何实施。我得到了这个错误。
org.apache.fop.events.LoggingEventListener processEvent 4/1/13 19:14:38:002 CDT 00000053 SystemErr R org.apache.fop.fo.ValidationException:"fo:table-cell“缺少子元素。必需的内容模型:标记*(%块;)+(没有上下文信息)
我有这段代码,但这不起作用。
<xsl:for-each select="./List">
<fo:table-row>
<fo:table-cell border="solid 1px" text-align="center">
<fo:block font-size="8pt"><xsl:value-of select="group" /></fo:block>
<fo:table-cell>
<fo:table-cell border="solid 1px" text-align="left">
<xsl:for-each select="./parts">
<fo:block font-size="8pt"><xsl:value-of select="partNumber" /><fo:leader />
</fo:block>
</xsl:for-each>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>发布于 2014-04-10 16:31:31
尝试删除严格的验证:
fopFactory.setStrictValidation(false);
发布于 2015-05-01 16:14:00
好吧,所以你遇到的问题来自这个街区。
<fo:table-cell border="solid 1px" text-align="left">
<xsl:for-each select="./parts">
<fo:block font-size="8pt"><xsl:value-of select="partNumber" /><fo:leader />
</fo:block>
</xsl:for-each>
</fo:table-cell>正如我相信其他人已经指出的那样,如果您有0个部件元素,那么您的表单元格就没有块子元素。在我看来,有两个简单的解决办法。首先,尝试将for-每个语句包装在另一个块元素中,如下所示。
<fo:table-cell border="solid 1px" text-align="left">
<fo:block>
<xsl:for-each select="./parts">
<fo:block font-size="8pt"><xsl:value-of select="partNumber" /><fo:leader />
</fo:block>
</xsl:for-each>
<fo:block>
</fo:table-cell>如果您发现它对您的格式有不必要的影响,您可以使用填充和其他属性,以便添加的块仍然保留您的对齐。这肯定能解决你的问题。另一种稍微复杂的方法是使用xsl: see语句,在尝试迭代它们之前测试它是否至少有一个部分,否则它会插入一个空块。
<fo:table-cell border="solid 1px" text-align="left">
<xsl:choose>
<xsl:when test="count(./parts) > 0">
<xsl:for-each select="./parts">
<fo:block font-size="8pt"><xsl:value-of select="partNumber" /><fo:leader />
</fo:block>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<fo:block> </fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:table-cell>虽然这样做更长,但它也更可扩展,例如,如果在将来的某个点,如果有数据,您希望它显示部件列表,如果不显示另一个值(可能也可能存在,也可能不存在),则可以简单地添加另一个which块,以减轻逻辑中的更改。
最后一个注意事项是,我在One语句中放置的块包含space,它只是单个空白的编码。如果您希望“空”块仍保留一行空间(即如果没有文本内容,则停止折叠),则可以使用空白来防止块折叠,否则,如果您不关心它是否折叠,只需删除空白即可。
发布于 2013-05-29 07:01:01
有时候,您的代码:
<xsl:for-each select="./parts">
<fo:block font-size="8pt"><xsl:value-of select="partNumber" /><fo:leader />
</fo:block>
</xsl:for-each>不会归还任何东西。您需要将它放入一个变量并检查它。如果没有值,则放置为空以避免此错误。
https://stackoverflow.com/questions/15754193
复制相似问题