首页 > 解决方案 > XSL 测试错误至少包含一个而不是仅包含一个

问题描述

有几个包含主题元素的 xml 文档,并且只有一个文件包含属性 product="OPTION" 的主题元素。

如果为主题设置了属性,我想写 OPTION,如果没有为主题设置属性,我想写 TOTO。

问题在于,如果至少一个文件包含属性 product="OPTION" OPTION ,那么实际上每个生成的 pdf 页面上都会写入该属性。

<xsl:template name="insertBodyEvenHeader">
  <xsl:param as="xs:string" name="flow-name" select="'even-body-header'" />
  <fo:static-content flow-name="{$flow-name}">
    <fo:block xsl:use-attribute-sets="__body__even__header">
      <xsl:choose>
         <xsl:when test="topic/@product='OPTION'">
            <fo:inline xsl:use-attribute-sets="title__option">
               <xsl:text>OPTION</xsl:text>
            </fo:inline>
          </xsl:when>
          <xsl:otherwise>TOTO</xsl:otherwise>
       </xsl:choose>   
    </fo:block>  
  </fo:static-content>
</xsl:template>

你能帮我处理那个测试吗?谢谢,最好的问候

标签: testingxsltxpathxsl-fo

解决方案


您的此模板的上下文可能高于主题(这是有道理的,因为您在主题/@product 上进行测试)。这就是为什么如果您有 10 个主题元素并且一个有 @product='OPTION' 则 WHEN 为真。

如果这是真的并且您想测试当前正在输出的主题,那么您将retrieve-marker在标题中使用,然后在主题模板中创建标记并将这些标记拉到标题中。

然后您的选择将变为@product(因为您在主题模板中),您只需删除一个fo:marker您可以在其中选择的内容,然后根据您希望如何处理它们来使用fo:retrieve-marker和一些。retrieve-position如果一个主题总是开始一个页面,那么你会使用first-including-carryover.


推荐阅读