XSL测试错误至少包含一个,而不是仅包含一个

时间:2018-10-23 09:27:08

标签: testing xslt xpath xsl-fo

有几个包含主题元素的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>

您是否愿意帮助我应对该考试?谢谢,谢谢。

1 个答案:

答案 0 :(得分:0)

此模板的上下文可能超出主题范围(这很有意义,因为您在topic / @ product上进行了测试)。这就是为什么如果您有10个主题元素,而有一个@ product ='OPTION'则WHEN为true。

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

您的选择将变成@product(因为您位于主题模板中),并且只需放入一个fo:marker即可选择的内容,然后使用fo:retrieve-marker和一些{{1} },具体取决于您希望如何处理它们。如果某个主题总是开始一个页面,那么您将使用retrieve-position