如何在xslt中测试模式然后隐藏输出?

时间:2011-10-24 11:49:46

标签: xslt

我正在使用xslt从xml创建屏幕上的pdf,我需要隐藏外部参照,但只有当它出现在title元素中时才会显示。

例如:

<title><i>Naseem Akhtar v Birmingham City Council</i> [2011] EWCA Civ 383 <xref href="#Public_PUBLICLAW_PLLR_2011PLLR002">Click here for transcript</xref></title>

我想在这里展示

Naseem Akhtar v Birmingham City Council</i> [2011] EWCA Civ 383

“点击此处查看成绩单”值仍为常数

我在黑暗中尝试过以下野性刺伤:

<xsl:template match="title">
 <xsl:if test="xref=href">
  <fo:block
    font-weight="bold"
    text-transform="uppercase">

    <xsl:apply-templates />
  </fo:block>
 </xsl:if>
</xsl:template> 

以及

<xsl:template match="title">
    <xsl:if test="*[contains(@class,' topic/xref ')][not(@href='')]">
  <fo:block
    font-weight="bold"
    text-transform="uppercase">

     <xsl:apply-templates />

  </fo:block>
   </xsl:if>
</xsl:template> 

但是没有捕获外部参照。

请有人请我指出正确的方向。

感谢。

1 个答案:

答案 0 :(得分:2)

这个简短而简单的转换(没有条件,只有一个模板):

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="title/xref"/>
</xsl:stylesheet>

应用于提供的XML文档

<title>
    <i>Naseem Akhtar v Birmingham City Council</i> [2011] EWCA Civ 383 
    <xref href="#Public_PUBLICLAW_PLLR_2011PLLR002">Click here for transcript</xref>
</title>

生成想要的正确结果

Naseem Akhtar v Birmingham City Council [2011] EWCA Civ 383 

<强>解释

  1. 如果未指定模板,则XSLT处理器使用 built-in XSLT templates ,这样做的摘要结果是按文档顺序输出所有文本节点。

    < / LI>
  2. 我们通过覆盖匹配任何元素的内置模板来改变上述1.的效果 - 对于xref的子元素的任何title元素。覆盖模板具有空体,实际上“删除”了该元素的内容。