2014-10-21 2 views
0

Я пытаюсь преобразовать BBCode в HTML с помощью XSLT. Вот что я сделал:Преобразование BBCode в HTML с XSLT

<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!

Может кто-нибудь сказать, что я делаю неправильно?

ответ

0

Попробуйте <xsl:copy-of select="foo:bbcode-to-xhtml('A [url=http://www.example.com/]Foo[/url] of Bar!')"/>, со значением вы получите только текстовые узлы.

+0

Вот и все! Гоша! ;) – Michael