使用XSLT将BBCode转换为HTML

时间:2014-10-21 13:29:07

标签: xml xslt saxon

我正在尝试使用XSLT将BBCode转换为HTML。这就是我所做的:

<xsl:stylesheet exclude-result-prefixes="foo xslt" version="2.0" xmlns="http://www.w3.org/TR/xhtml1/strict"
  xmlns:foo="urn:foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xslt="http://xml.apache.org/xslt">
  <xsl:output encoding="UTF-8" indent="yes" media-type="text/html" method="html" version="4.0" xslt:indent-amount="4"/>

  <xsl:function name="foo:bbcode-to-xhtml">
    <xsl:param name="bbcode"/>
    <xsl:analyze-string flags="is" regex="\[url=(.*?)\](.*?)\[/url\]" select="$bbcode">
      <xsl:matching-substring>
        <a href="{regex-group(1)}">
          <xsl:value-of select="regex-group(2)"/>
        </a>
      </xsl:matching-substring>
      <xsl:non-matching-substring>
        <xsl:value-of select="."/>
      </xsl:non-matching-substring>
    </xsl:analyze-string>
  </xsl:function>

  <xsl:template match="/">
    <xsl:value-of select="foo:bbcode-to-xhtml('A [url=http://www.example.com/]Foo[/url] of Bar!')"/>
  </xsl:template>
</xsl:stylesheet>

这就是我得到的:

A  Foo  of Bar!

这就是我的期望:

A <a href="http://www.example.com/">Foo</a> of Bar!

有谁可以说我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试<xsl:copy-of select="foo:bbcode-to-xhtml('A [url=http://www.example.com/]Foo[/url] of Bar!')"/>,使用值 - 您只能获得纯文本节点。