下面是我的示例 xml;
<Item>..</Item>
的数量将固定为(4);和<ItemName>..</ItemName>
内容也将相同;只有<ItemValue> ..</ItemValue>
,会改变。
以下是示例 xml:
<Header>
<Item>
<ItemName><![CDATA[ItemName1]]></ItemName>
<ItemValue><![CDATA[ItemValue1]]></ItemValue>
</Item>
<Item>
<ItemName><![CDATA[ItemName2]]></ItemName>
<ItemValue><![ItemValue2]]></ItemValue>
</Item>
<Item>
<ItemName><![CDATA[ItemName3]]></ItemName>
<ItemValue><![CDATA[ItemValue3]]></ItemValue>
</Item>
<Item>
<ItemName><![CDATA[ItemName4]]></ItemName>
<ItemValue><![CDATA[ItemValue4]]></ItemValue>
</Item>
</Header>
现在我想在这里表示 ItemName(s) 和 ItemValue(s),前提是最后两组是 (ItemName3,ItemValue3) 和 (ItemName4,ItemValue4),我想以粗体显示;显然,我们可以通过根据需要设置 fo:block font-weight="bold" 来逐一遍历。 但是在这里我想在循环中使用它; 试过如下示例代码:
<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="30mm"/>
<fo:table-column column-width="35mm"/>
<fo:table-body>
<xsl:for-each select="Header/Item">
<fo:table-row>
<fo:table-cell>
<xsl:choose>
<xsl:when test="ItemName != 'ItemName3' or ItemName != 'ItemName4'">
<fo:block>
<xsl:value-of select="ItemName"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block font-weight="bold">
<xsl:value-of select="ItemName"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:table-cell>
<fo:table-cell>
<xsl:choose>
<xsl:when test="ItemName != 'ItemName3' or ItemName != 'ItemName4'">
<fo:block>
<xsl:value-of select="ItemValue"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block font-weight="bold">
<xsl:value-of select="ItemValue"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
但是 fop 抱怨 fo:table-cell 缺少子元素;那么可能的解决方案是什么?
更新
在上面的代码中添加了 xsl:choose 现在它没有抱怨但也没有得到预期的结果。相反,所有文本仅以正常字体粗细打印。
按照建议也尝试过代码片段(仅发布粗体逻辑)
<xsl:if test="ItemName != 'ItemName3' or ItemName != 'ItemName4'">
<xsl:attribute name="font-weight" select="'bold'"/>
</xsl:if>
虽然没有错误,但也没有得到任何预期的结果。
试试这个:
<xsl:for-each select="Header/Item">
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:if test="not(ItemName=('ItemName3','ItemName4'))">
<xsl:attribute name="font-weight" select="'bold'"/>
</xsl:if>
<xsl:value-of select="ItemName"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>