使用xslt将xml转换为xsl-fo时动态创建超链接?

时间:2014-01-24 09:12:28

标签: c# .net xslt xsl-fo

我想使用我的xsl文件在PDF报告中创建标题。如果源文件包含超链接,则应将其呈现为超链接,否则为纯文本。

例如,我的xml看起来像:

<a href='http://google.com' target='_blank'>This is the heading </a>"

如果有超链接,则应显示超链接,否则将标题显示为纯文本。 我怎么能这样做?

我无法在其他标签下使用以下代码,请参阅下文

  <xsl:choose>
    <xsl:when test="($RTL='true') or ($RTL='True')">
      <fo:block wrap-option="wrap" hyphenate="true"  text-align="right" font-weight="bold">
        <xsl:value-of select="@friendlyname" />
      </fo:block>
    </xsl:when>
    <xsl:otherwise>
      <!--<fo:block wrap-option="wrap" hyphenate="true"  font-weight="bold">-->
      <xsl:template match="a">
        <fo:block>
          <xsl:choose>
            <xsl:when test="@href">
              <fo:basic-link>
                <xsl:attribute name="external-destination">
                  <xsl:value-of select="@href"/>
                </xsl:attribute>
                <xsl:value-of select="@friendlyname"  />
              </fo:basic-link>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="@friendlyname"  />
            </xsl:otherwise>
          </xsl:choose>
        </fo:block>

      </xsl:template>

      <!--<xsl:value-of select="@friendlyname"  />-->

      <!--</fo:block>-->
    </xsl:otherwise>
  </xsl:choose>
</xsl:if>

我怎样才能在那里使用它?

1 个答案:

答案 0 :(得分:1)

要在XSL-FO中显示链接,请使用fo:basic-link。有关详细信息,请参阅the relevant part of the specification

这创建了一个简单的可点击链接,否则没有任何格式。也就是说,格式是从周围的块元素继承的。因此,如果您的链接应加下划线或以蓝色显示,则必须明确指定。例如,使用fo:inline元素。

现在,就XSLT代码而言,如果遇到a元素:

<xsl:template match="a">
 <fo:block><!--This is the heading block-->

测试是否存在href属性:

  <xsl:choose>
    <xsl:when test="@href">
      <fo:basic-link>
        <xsl:attribute name="external-destination">
          <xsl:value-of select="@href"/>
        </xsl:attribute>
        <xsl:value-of select="."/>
      </fo:basic-link>
    </xsl:when>

另一方面,如果没有这样的属性:

    <xsl:otherwise>
      <xsl:value-of select="."/>
    </xsl:otherwise>
  </xsl:choose>
 </fo:block>

</xsl:template>

基本链接可以包含外部或内部目标。后者用于指代目录中的特定章节。