testing - 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>
你能帮我处理那个测试吗?谢谢,最好的问候
解决方案
您的此模板的上下文可能高于主题(这是有道理的,因为您在主题/@product 上进行测试)。这就是为什么如果您有 10 个主题元素并且一个有 @product='OPTION' 则 WHEN 为真。
如果这是真的并且您想测试当前正在输出的主题,那么您将retrieve-marker
在标题中使用,然后在主题模板中创建标记并将这些标记拉到标题中。
然后您的选择将变为@product(因为您在主题模板中),您只需删除一个fo:marker
您可以在其中选择的内容,然后根据您希望如何处理它们来使用fo:retrieve-marker
和一些。retrieve-position
如果一个主题总是开始一个页面,那么你会使用first-including-carryover
.
推荐阅读
- javascript - 如何使用 html、css、bootstrap 在下拉列表中创建活动元素
- python - Tkinter 交互式和动态 GUI
- android - 当应用程序处于后台/被杀死时,Firebase FCM 不调用服务
- angular - rxjs6 - TypeError:无法读取未定义的属性“管道”
- javascript - React 组件不会重新渲染
- html - 引导程序 3 与引导程序 4
- replace - 用另一个字符串替换字符串
- dart - 如果类型化函数不返回值,Dart 分析器不应该显示警告吗?
- ms-access - 访问表单复选框 AND OR 语句
- android - 如何通过 Retrofit 在 Web 服务上获取 JSON 数组